経緯
- githubへssh接続をしよう
- パスフレーズの入力がめんどくさい!
- ssh-agent使えばパスフレーズの省略ができるだと...!?
SSH接続
(githubへの公開鍵の登録は既にすんでいる前提で進めます)
パスフレーズ無しの場合
パスフレーズが設定されていない場合、sshコマンドを叩くだけで接続できます。
-> % ssh git@github.com
PTY allocation request failed on channel 0
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
パスフレーズありの場合
パスフレーズが設定されている場合、sshコマンドを叩いたあとにパスフレーズの入力を求められます。もちろんpullやpushの度に入力をしなければいけません。
-> % ssh git@github.com
Enter passphrase for key '/Users/{username}/.ssh/id_rsa':
ssh-agentの導入
pullやpushの度に長いパスフレーズの入力を求められるのでは生産性が落ちます。そこで登場するのがssh-agent
です。
ssh-agentは、秘密鍵とそのパスフレーズを登録しておくことで、必要な時に必要な秘密鍵を復号化して渡してくれるプログラムです。つまり、ssh-agentへ秘密鍵を登録すると、プロセスが生きている間はパスフレーズ無しでssh接続ができるようになります(macの場合は、後述するようにキーチェーンを利用することで永続的にパスフレーズなしで接続することもできます)。
ssh-agentへの登録はssh-add
コマンドを利用します。すると、パスフレーズの入力を求められます。
-> % ssh-add ~/.ssh/id_rsa
Enter passphrase for /Users/{username}/.ssh/id_rsa:
Identity added: /Users/{username}/.ssh/id_rsa
この状態でgithubへ接続すると...
-> % ssh git@github.com
PTY allocation request failed on channel 0
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
無事パスフレーズ無しでgithubへ接続できました!
おまけ
上記の方法だとssh-agentのプロセスが死ぬと登録されている鍵情報も消えてしまいます。つまり、パソコンを再起動してしまうと、ssh-agentへ登録した鍵情報が消えてしまうということです。
試しにssh-agentをkillしてからssh接続を試みると、再びパスフレーズの入力を促されます。
> % ps -x | grep ssh-agent
1330 ?? 0:00.01 /usr/bin/ssh-agent -l
1437 ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox ssh-agent
-> % kill 1330
-> % ssh git@github.com
Enter passphrase for key '/Users/{username}/.ssh/id_rsa':
これはこれで、セキュリティ上望ましいのですが、やはりめんどくさい。と、思った方。macであれば鍵情報をキーチェーンへ保存しておくことができます。
やり方は、ssh-addする時に-K
オプションを指定するだけです。ssh-agentのプロセスが死んでしまった時はssh-addへ-A
オプションを渡すことでキーチェーンから鍵情報を復元できます。
-> % ssh-add -K ~/.ssh/id_rsa
Enter passphrase for /Users/{username}/.ssh/id_rsa:
Identity added: /Users/{username}/.ssh/id_rsa
-> % ssh-add -A
Identity added: /Users/{username}/.ssh/id_rsa
また、~/.ssh/config
へ次のような設定を記しておくことで、キーチェーンへの登録、復元という作業を自動化することもできます!
Host *
AddKeysToAgent yes
UseKeychain yes