パスワード認証から公開鍵認証へ

いつもいきなり設定を変えてしまったーとか思うんで、ちゃんと記録しておきます。

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

とか出ました。