SSHの公開鍵認証を設定する

利用していたレンタルサーバの個人向けサービスが終了し、違うサービスへ乗り換えました。

そこでCapistrano使うにあたってsshに公開鍵認証(パスワード無し認証)が必要だったのですが設定方法があやふや・・・

ってことで備忘録しておこうと思います。
なお、クライアントはMac OS Xを利用しています。

クライアントで公開鍵と秘密鍵を作成する

はじめにクライアント端末でssh-keygenを実行します。

$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxx/.ssh/id_rsa):     #Enter(名前を変えてもよい)
Created directory '/home/xxxx/.ssh'.
Enter passphrase (empty for no passphrase):                       #秘密鍵のパスフレーズ
Enter same passphrase again:                                      #もう一回
Your identification has been saved in /home/yamada/.ssh/id_rsa.   #秘密鍵
Your public key has been saved in /home/yamada/.ssh/id_rsa.pub.   #公開鍵
The key fingerprint is:
54:e0:ce:43:22:19:86:ce:8a:b5:c5:d6:c3:11:2d:37 xxxx@www.example.com
The key's randomart image is:
+--[ RSA 2048]----+
|     .. ...      |
|   . A.E .       |
|  o o.+ =        |
|.= =o+.*         |
|o.o+.+. S        |
| ..   .  .       |
|                 |
|                 |
|                 |
+-----------------+

ここでパーミッションを以下の通り設定します。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/*
ログインしたいサーバに公開鍵を送る

先ほど作成した公開鍵(id_rsa.pub)をログインしたいサーバに設置します。
なお設置場所は「ログインに利用するユーザのホームディレクトリ/.ssh」です。
(scp使っていますが、ftpでもハードコピーでもなんでもいいです。)

$ scp ~/.ssh/id_rsa.pub user@www.example.com:~/.ssh

そしてサーバ側に設置したid_rsa.pubをauthorized_keysにリネームします。
また、ここでも同様にパーミッションを設定します。

[user@www.example.com]$ cd ~/.ssh
[user@www.example.com]$ mv id_rsa.pub authorized_keys
[user@www.example.com]$ chmod 600 authorized_keys
sshd_configの設定

サーバ側のsshdの設定を行います。

#/etc/ssh/sshd_config

PubkeyAuthentication yes      #公開鍵認証を有効にする
PasswordAuthentication no     #パスワード認証を無効にする

あとはsshdを再起動!

$ service sshd restart
接続してみる

ここまでで設定は完了。
クライアントから接続してみます。

$ ssh user@www.example.com
The authenticity of host '[www.example.com]([111.111.111.111])' can't be established.
RSA key fingerprint is 54:e0:ce:43:22:19:86:ce:8a:b5:c5:d6:c3:11:2d:37.
Are you sure you want to continue connecting (yes/no)? yes     #このサーバに本当に接続してよいか?
Warning: Permanently added '[www.example.com],[111.111.111.111]' (RSA) to the list of known hosts.

ここでMac OSの場合は秘密鍵パスフレーズ入力用にダイアログが表示されます。
f:id:WorldWorldWorld:20140621111323p:plain

…
Saving password to keychain failed
Identity added: /home/xxxx/.ssh/id_rsa (/home/xxxx/.ssh/id_rsa)
Last login: Sat Jun 21 02:47:55 2014 from test.example.jp
[user@www.example.com]$ 

接続完了です!
これで次回の接続以降はsshコマンドを実行するだけでサーバへ接続可能になります。

※鍵完成後に秘密鍵パスフレーズ入力を毎回省略するためにはssh-agentをの起動が必要になります。
ssh-agentが動いていないと毎回パスフレーズの入力が必要になるはず。