パスワード認証から公開鍵認証へ
いつもいきなり設定を変えてしまったーとか思うんで、ちゃんと記録しておきます。
sshdを再起動しても接続がキープできることを確認
切れることはないと思うんだけど、sshdの設定を間違えて誰もログインできない状態になることをまず避けるために、sshでログインした状態で
$ sudo /etc/init.d/sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ] $
で接続が切れないことを確認する。ここで切れたら、一か八かの設定しかできなくなっちゃう。確認しておけばひと安心。
RSAの鍵を生成
アクセスするための鍵がある場合はいいんだけど、サーバー毎に分けておきたい場合もあります。その時は作っておきましょう。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/foo/.ssh/id_rsa): /home/foo/.ssh/foo_bar_id_rsa Created directory '/home/foo/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/foo/.ssh/foo_bar_id_rsa. Your public key has been saved in /home/foo/.ssh/foo_bar_id_rsa.pub. The key fingerprint is: 24:2b:11:37:f7:6d:92:58:40:ce:7f:8e:56:9b:fa:2d foo@bar.org $ $ ls -la ~/.ssh
で、~/.sshに鍵が作られているのを確認。で、authrolized_keysに追加
$ cat .ssh/foo_bar_id_rsa.pub > ~/.ssh/authorized_keys
~/.ssh/authorized_keys が他のユーザーも読めちゃうをちゃんと動いてくれないので、chmodしておきます。
$ chmod go-rw ~/.ssh/authorized_keys
で、実際ににログインするクライアントのPCに鍵をscpでコピー。これはサーバー側ではなくて、クライアントの別のターミナルで実行します。
$ scp foo@xxx.xxx.xxx.xxx:~/.ssh/foo_bar_id_rsa* ~/.ssh/ $ ls -la ~/.ssh
でコピーできていることを確認。
sshdの設定
/etc/init.d/ssh/sshd_config を以下のように設定して、パスワード認証をやめて、RSAの認証を有効にします。ルートでのログインもできないようにして、PAMを使わないようにします。
PermitRootLogin no (中略) RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys (中略) PasswordAuthentication no (中略) ChallengeResponseAuthentication no (中略) UsePAM no
保存したら
$ sudo /etc/init.d/sshd restart
再起動したら、クライアントの別のターミナルで、接続してみます。
$ ssh -i ~/.ssh/foo_bar_id_rsa foo@xxx.xxx.xxx.xxx
ちゃんと設定できていれば、これでいけるはず。
もしダメだったら、
$ sudo tail -f /var/log/secure
とかして、ログを見てみてください。~/.ssh/authorized_keysをchmodしてないと
Apr 11 15:59:19 bar sshd[15908]: Authentication refused: bad ownership or modes for file /home/foo/.ssh/authorized_keys
とか出ました。