keychainとssh-agentを組み合わせると、一度ssh秘密鍵のパスフレーズの入力後、パスフレーズの入力無しにsshログインが可能になる。
- ssh-agentは、秘密鍵をキャッシュし、
- keychainは、ssh-agentを管理する。
前準備
sshの秘密鍵・公開鍵の生成
$ ssh-keygen -t dsa # 強力なパスフレーズを入力するべき
下記に秘密鍵と公開鍵が生成される。
- ~/.ssh/id_dsa
- ~/.ssh/id_dsa.pub
生成した公開鍵をログイン先に登録(ssh-copy-idを使用)
手動でログイン先に公開鍵を登録するのはめんどくさいので、ヘルパーコマンド(ssh-copy-id)を使用して公開鍵を登録
$ ssh-copy-id -i ~/.ssh/id_dsa.pub remote_host
keychainの設定
~/.bash_profileや~/.zshenvなどのシェルのスタートアップスクリプトに下記設定を記述
.zshenv
keychain --nogui --quiet ~/.ssh/id_dsa
source ~/.keychain/$HOST-sh
次回のシェル起動時には下記の入力が指示される。
keychainは、デーモン動作するのでssh秘密鍵のパスフレーズの入力は最初のシェル起動時の一回だけですむ。
Enter passphrase for /home/your_name/.ssh/id_dsa: [パスフレーズを入力]
パスフレーズ無しにsshログインできなかったときの確認事項
- ログイン先の~/.ssh/authorized_keys に生成した公開鍵が登録されていることを確認。
- keychainコマンドを実行し、ssh-agentが動作しているか確認。
参考
Gentoo Linux keychainガイド
http://www.gentoo.org/doc/ja/keychain-guide.xml
ssh-agent & keychain の勉強
http://www.hasta-pronto.org/2006/12/10/sshagent-keycha.html