sshでサーバにログインして作業することはたびたびあると思いますが、そのたびにパスワードを入力するのは非常に面倒です。またスクリプトなどで他のサーバにアクセスする場合にはそもそもパスワードを入力することができません。
公開鍵認証でsshを利用すると、最初の設定が終われば、以後パスワード入力なしでsshが可能となります。秘密鍵はパスフレーズで暗号化することができますが、ここではパスフレーズは設定しないものとします。
準備は非常に簡単です。まず以下のコマンドで公開鍵を作成します。パスフレーズや作成するファイル名を聞かれますが、ここではすべてデフォルトで改行を入力します。
$ ssh-keygen
すると~/.ssh/の下に公開鍵id_rsa.pubと秘密鍵id_rsaが作成されます。このうち公開鍵をid_rsa.pubをサーバに設定すれば設定は完了です。秘密鍵は他の人に見られないように気をつけます。
公開鍵をサーバにコピーした後に、以下のコマンドで認証に使う鍵に追加します。以上で設定は完了です。パスワード入力なしでsshが可能になっていると思います。うまくいかない場合には、.sshディレクトリを手動で作成した場合などは、パーミッションが自分以外から見えるようになっていないかなど確認してください。
$ cat id_rsa.pub >> .ssh/authorized_keys
公開鍵認証のみでログイン可能にする
サーバに不法侵入されるというようなトラブルは、なんらかの方法でアカウント情報が漏洩してしまったか、もしくは認証が破られてしまった場合に発生するわけですが、現実問題として暗号を解析してパスワードを解析されたり、システムがクラックされて情報が盗まれたりすることはほとんどありません。
それではなぜ侵入されてしまうかというと、パスワードが十分に安全ではないので機械的な辞書攻撃などで破られてしまうのです。それを防ぐためには、そのサーバに存在するすべてのユーザが十分に強度のあるパスワードを設定すればよいわけですが、それを徹底するのは簡単でありません。テスト用に作成したアカウントが消し忘れていた場合などもあります。
sshでパスワードによるログインを禁止し、公開鍵認証のみを使うようにするとその問題が一気に解消されます。すべてのユーザが十分に強度のある公開鍵というものを使ってのみ認証するからです。
sshサーバの設定は/etc/ssh/sshd_configにあります。以下のような設定項目があり、デフォルトではyesになっていますが、これをnoに変更することでパスワードによるログインを禁止できます。設定の変更後はsshdの再起動が必要です。
PasswordAuthentication yes
これは非常に簡単です。上記のようにパスフレーズなしの鍵を使用すれば、sshのログインの際のパスワード入力も不要となり手間も削減できるので、セキュリティ対応で面倒になるわけでもありません。
唯一気をつけなければいけない点は、あらかじめ鍵を登録しないとログインできないことです。上記設定を変更する前には既存のユーザは鍵の設定を完了しておく必要があります。また、新しく作成されたユーザはログインできないので管理者に鍵を登録してもらう必要があります。
