ssh-agentのまとめ
参考サイト ssh-agentを使って公開鍵認証方式のsshパスワード入力を省略する方法 | server-memo.net
ssh-agentとは
公開鍵認証方式による認証を行っているSSHサーバへ接続する際、秘密鍵に設定されているパスフレーズの入力を代わりにやってくれる(秘密鍵とパスフレーズはメモリ上にキャッシュされる)。例えば、同じ公開鍵をおいた複数台のリモートサーバーがあるとすると、それらに接続する時、通常なら1台ごとにパスワードを入力しなければならないが、ssh-agentに秘密鍵とパスワードを登録しておけば、そのようなことが不要になる。
ssh-agentは便利だが、注意点もある。
- ssh-agentを起動したシェル内のみ有効。ログアウトしたりシェルを変更すると使えなくなりssh-agentの再実行が必要
- ssh-addで秘密鍵とパスフレーズの登録が必要。ssh-agentを起動するたびに登録が必要
- ssh-agentが自動終了しない ログアウトしたりシェルを変更してもssh-agentは自動終了しないため、新しいシェルでssh-agentを起動すると多重起動が発生してしまう
ssh-agentの起動
一般的に
$ eval `ssh-agent` Agent pid 37343
でssh-agentが起動し、使用できるようになる。以下のように「ssh-agent」だけでは、*環境変数を手動で設定しないと動かず、手間がかかるので、「eval `ssh-agent`」
で起動するのが合理的である。
$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-NacKBwK56etU/agent.3193; export SSH_AUTH_SOCK; SSH_AGENT_PID=3194; export SSH_AGENT_PID; echo Agent pid 3194;
なお、ssh-agentが起動していない時は以下のようなメッセージが出てくる。
$ ssh-add ~/.ssh/id_ecdsa_100 ~/.ssh/id_rsa Could not open a connection to your authentication agent.
秘密鍵とパスフレーズの登録
秘密鍵は複数同時に登録できる。
$ ssh-add ~/.ssh/id_rsa_bitbucket ~/.ssh/id_rsa Enter passphrase for /home/vagrant/.ssh/id_rsa_bitbucket: Identity added: /home/vagrant/.ssh/id_rsa_bitbucket (/home/vagrant/.ssh/id_rsa_bitbucket) Enter passphrase for /home/vagrant/.ssh/id_rsa: Identity added: /home/vagrant/.ssh/id_rsa (/home/vagrant/.ssh/id_rsa)
これによって、登録された秘密鍵に対応する公開鍵を有すSSHサーバにはパスワードなしで接続できるようになる。公開された鍵は以下のようにして確認できる。
vagrant@home:~/Project/$ ssh-add -l 2048 SHA256:salCLeOtWqM5zZeVPom2Yp+ovZFIx0T7bXkwTo71PeNtk usr410213@JKPN0009 (RSA) 3072 SHA256:sad7D7N4BhrYCOvxHYtjhVeagEn7HGP9XkMkIMY95xXkg usr410213@JKPN0009 (RSA)
秘密鍵情報の引き継ぎ
ssh-agentにローカルで秘密鍵とパスフレーズ登録後、sshで接続を行う際に「-A」オプションを指定すると、接続先にも秘密鍵とパスフレーズの情報が引き継がれる。capistranoなどでデプロイするときに必要となる。
vagrant@home$ ssh-add -l 2048 SHA256:salCLeOtWqM5zZeVPom2Yp+ovZFIx0T7bXkwTo71PeNtk usr4100082@JKPN0009 (RSA) 3072 SHA256:sad7D7N4BhrYCOvxHYtjhVeagEn7HGP9XkMkIMY95xXkg usr4100082@JKPN0009 (RSA) vagrant@home$ ssh -A dev-app Last login: Fri Sep 3 16:10:38 2020 from 127.0.0.1 ・・・ kp-aaa@dev-app:~$ ssh-add -l 2048 SHA256:salCLeOtWqM5zZeVPom2Yp+ovZFIx0T7bXkwTo71PeNtk usr4100082@JKPN0009 (RSA) 3072 SHA256:sad7D7N4BhrYCOvxHYtjhVeagEn7HGP9XkMkIMY95xXkg usr4100082@JKPN0009 (RSA)
ssh-agentの停止
$ eval `ssh-agent -k` Agent pid 2985 killed
「eval」コマンドを使用せずに「ssh-agent -k」を実行すると、起動時に登録した環境変数を削除するための「unset」が表示されるので、これをコピーして実行することで環境を変数を削除することができる。
$ ssh-agent -k unset SSH_AUTH_SOCK; unset SSH_AGENT_PID; echo Agent pid 2107 killed;