利用していたレンタルサーバの個人向けサービスが終了し、違うサービスへ乗り換えました。
そこで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の場合は秘密鍵のパスフレーズ入力用にダイアログが表示されます。
… 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が動いていないと毎回パスフレーズの入力が必要になるはず。