sshでは公開鍵を設定することでパスワードなしでのサーバーログインが可能になる。この手順についてまとめておく。
サーバー側で利用するsshのバージョンを確認する。今回はVersion 2のみを利用するとする。(サーバー側作業)
$ cat /etc/ssh/sshd_config | grep Protocol Protocol 2
設定をするためにパスワードでのログインが可能になるようにしておく。(サーバー側作業)
$ cat /etc/ssh/sshd_config | grep PasswordAuthentication #PasswordAuthentication yes PasswordAuthentication yes
クライアント側に移る。
ホームディレクトリに移動して.sshディレクトリを作成する。ホームと.sshディレクトリのパーミッションを700とする。(クライアント側作業)
$ mkdir .ssh $ chmod 700 .ssh $ ls -al total 48 drwxrwxrwt. 11 usera usera 4096 Jun 3 14:37 . dr-xr-xr-x. 25 usera usera 4096 Jan 11 02:06 .. drwx------ 2 usera usera 4096 Jun 3 14:37 .ssh
公開鍵を作成する。(クライアント側作業)
$ cd .ssh $ ssh-keygen -t dsa
-t dsaを指定しないとrsa鍵が作成される。これはVersion1であるために接続時に失敗する。パスフレーズはブランクにしておく。
作成した鍵をサーバー側にコピーする。(クライアント側作業)
$ scp id_dsa.pub usera@server01:
サーバーに移動する。
ホームディレクトリに移動して.sshディレクトリを作成する。ホームと.sshディレクトリのパーミッションを700とする。(サーバー側作業)
$ mkdir .ssh $ chmod 700 .ssh $ ls -al total 48 drwxrwxrwt. 11 usera usera 4096 Jun 3 14:37 . dr-xr-xr-x. 25 usera usera 4096 Jan 11 02:06 .. drwx------ 2 usera usera 4096 Jun 3 14:37 .ssh
authorized_keys2を作成する。(サーバー側作業)
$ mv .id_dsa.pub .ssh $ cat id_dsa.pub >> authorized_keys2 $ chmod 600 authorized_keys2
証明書でのログインを許可する。(サーバー側作業)
$ cat /etc/ssh/sshd_config | grep PubkeyAuthentication PubkeyAuthentication yes
sshdを再起動する。(サーバー側作業)
クライアントからテストをする。一回目はパスワードをきかれるかもしれないが、2回目以降はパスワードなしでログインできる。
sshのログを確認するには2つ方法がある
- クライアント側のチェックは ssh -vvvでデバッグしてみる。
- サーバー側は /var/log/secureでログを確認する
パスワードをきかれてしまう場合のチェック項目
- SELinuxを無効にする
- ホームディレクトリ、.sshディレクトリ、authorized_keys2、id_dsaのパーミッションがディレクトリについては700、ファイルについては600であることを確認する。ssh-copy-idで公開鍵をサーバー側に送るようにするとパーミッションも正しく設定してくれる
- プロトコルのバージョンがサーバーとクライアントで一致していない。