ssh-agentのすゝめ
ssh-agentは大体のsshクライアントに付属されている鍵管理ツールです。結構昔からある気がしますが、時代とともに忘れ去れてる気がするのでまとめておきます。
Bastion(踏み台)経由の多段SSHが楽になるし、proxyCommandを~/.ssh/configを書きなぐらなくてよくなります。
焦ってBastionに鍵を置いちゃうなんていう手抜きをしなくて済みますよ。
TL;DR
3OSでのopensshインストール方法とそのあとの設定方法を記載しています。
インストール
一番末端のクライアントに入れます。(ふつうは自端末かな?)
Windowsの場合
- OpenSSHクライアントを有効にします。
- サービスの
OpenSSH Authentication Agent
を自動起動にする。
これの通りで問題なし。
https://qiita.com/akiakishitai/items/9e661a126b9c6ae24a56
Macの場合
最近のMacOSの場合以下の手順で設定する.
-
~/.ssh/config
にUseKeychain yes
,AddKeysToAgent yes
を設定する。 -
ssh-add -K
- デフォルトは
/Users/${username}/.ssh/id_rsa
をKeyChain Accessに登録する - デフォルト以外を使う場合は引数に追加する
ssh-add -K [/path/to/id]
- デフォルトは
Linux(WSL)の場合
opensshのクライアントが入っていればOKです。(ふつうはデフォルトで入ってる)
設定手順
- 自端末で鍵を作ります。すでにある人はそれで。
- Bastionとターゲットの
~/.ssh/authorized_keys
に登録します。(別ユーザーsshしてやる) - 自端末でssh-agentを起動させます。
eval `ssh-agent`
Serviceの自動起動できてる人は必要なし。 - 自端末で
ssh-add 鍵ファイル
します。(複数いけます - ssh -A xxx でサーバに接続します。-Aで
ssh-add -l
で出てくる鍵を上から順に試します。
-Aを入れるのがめんどくさい人は
~/.ssh/config に ForwardAgent yes
を追加します。
Bastionのrootユーザーに悪いやつがいるとその先で乗っ取られるので、そういう環境にいる人はhost毎に設定したほうがいいと思います。(環境を何とかするんだ)
※注意事項
ForwardAgent yes
は、下記のようにHostの下に書かないと機能しないっぽいので注意。(Hostを * とすると全体となるハズ。
Host xxx
ForwardAgent yes
確認
ssh-add -L
で利用する鍵の公開鍵一覧を見れます。-lだとフィンガープリントがでる。
[derori@murata ~]$ ssh-add -L
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGa8KIhyYreW9GxW1Y+fzVo07Hy2ca/4ffnuJ2mrfjUr First key
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDRSbSkJBU5sJujSanjbcCgcOFIr+KPI0Ed1NzOalkax 2nd key
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjRoj8NUOwadeJr23O6cB0wXF8jqufAnS5LSc1QaqsL 3rd key
これは中間サーバでも見ることができます。(ForwardAgent yes にした次のホストまでこうなる。)
↓の場合、192.168.0.206まで。192.168.0.203ではssh-agentは起動しない。192.168.0.33でしかForwardAgent yes
にしていない。
[derori@192.168.0.33 ~]$ ssh-add -L
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGa8KIhyYreW9GxW1Y+fzVo07Hy2ca/4ffnuJ2mrfjUr First key
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDRSbSkJBU5sJujSanjbcCgcOFIr+KPI0Ed1NzOalkax 2nd key
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjRoj8NUOwadeJr23O6cB0wXF8jqufAnS5LSc1QaqsL 3rd key
[derori@192.168.0.33 ~]$ ssh deroru@192.168.0.206
Last login: Tue Nov 10 17:12:08 2020 from 192.168.0.33
[deroru@192.168.0.206 ~]$ ssh-add -L
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGa8KIhyYreW9GxW1Y+fzVo07Hy2ca/4ffnuJ2mrfjUr First key
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDRSbSkJBU5sJujSanjbcCgcOFIr+KPI0Ed1NzOalkax 2nd key
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjRoj8NUOwadeJr23O6cB0wXF8jqufAnS5LSc1QaqsL 3rd key
[deroru@192.168.0.206 ~]$ ssh deropi@192.168.0.203
Last login: Tue Nov 10 17:26:42 2020 from 192.168.0.206
[deropi@192.168.0.203 ~]$ ssh-add -L
Could not open a connection to your authentication agent.
Tips
- 自端末って普通は電源を切るので、毎度ssh-addするのめんどくさいですよね。下記のように
~/.bashrc
に登録しています。
eval `ssh-agent`
ssh-add ~/.ssh/xxxxxxx
ssh-add ~/.ssh/xxxxxxx
Windowsだと大丈夫な気がする。
- BastionのsshdがAllowAgentForwarding yesとなっている必要がある。
- gitの鍵が複数ある場合にはどうにもならないので、~/.ssh/configにホストを分けて書くか
GIT_SSH_COMMAND
で渡す。https://blog.dnpp.org/git_environment - macの場合Keychainに登録できて、それで管理できるらしい。
- 中間やターゲットでtmuxを貼っている場合、ssh-agentが渡している鍵ファイルのsymlinkと環境変数がずれておかしくなるので、~/.bashrc等で張り替えてあげる。 https://qiita.com/sonots/items/2d7950a68da0a02ba7e4
-
ssh-add -D
で全消しできます。-d で個別です。
これで、~/.ssh/config にProxyCommandを毎度毎度書く必要はなくなりますね。(書けばいいじゃん)
ちょっと雑になっちゃいましたが、鍵ファイルを散りばめてしまうリスクを減らしましょうというお話でした。