ssh-agent forwardingするのにハマったので備忘録として残す。
ssh agent forwardingとは
ssh agentで登録させた情報を、接続後のssh接続に引き継ぐやり方である
よく、ssh秘密鍵をサーバーにコピーしないで、ssh秘密鍵認証する際に使われる
上図を例にとると、
- サーバーA上にのみあるssh秘密鍵をサーバーAのssh agentに登録
- サーバーBにssh公開鍵認証で接続
- そのままサーバーBからサーバーCに接続する際に
- ssh秘密鍵をサーバーAのssh agentから引き継ぎ、ssh公開鍵認証する
そういう状態のことである
設定方法
クライアント側
putty なら agent forwardingを許可する設定をON
LinuxやMacOSなどなら eval `ssh-agent` と ssh-add などする
サーバー側
まず、sshdデーモン側でAgentForwardingを許可する必要がある
AllowAgentForwarding yes
このsshd_configのowner/groupとパーミッションは
root root -rw------- とする
つぎに、sshコマンドする際にAgentForwardingをする
- 接続毎にコマンドライン許可する場合には -A オプション
- ユーザー毎にデフォルトで許可する場合には ~/.ssh/config に ForwardAgent yes 設定
- システム全体でデフォルトで許可する場合には /etc/ssh/ssh_config に ForwardAgent yes 設定
する必要があるを記載する
接続毎許可
ssh -A (接続先ユーザー)@(接続先サーバー)
ユーザー毎許可
ForwardAgent yes
この~/.ssh/configのowner/groupとパーミッションは
(実行ユーザー) (実行グループ) -rw------- とする
システム全体許可
ForwardAgent yes
この/etc/ssh/ssh_configのowner/groupとパーミッションは
root root -rw-r--r-- とする
(実行ユーザーが参照できるパーミッションが必要)
ちなみに、これらの設定の参照順位については、下記となっている
- 1番目に コマンドラインオプションを参照し
- 2番目に ユーザー設定ファイル(~/.ssh/config)を参照し
- 3番目に システム設定ファイル(/etc/ssh/ssh_config)を参照する
おまけ
踏み台以降のサーバーにssh秘密鍵をコピーしない(させない)のに、ユーザーとユーザー毎に公開鍵をauthorized_keysを設置するのは面倒なので、サーバー側の公開鍵管理はLDAPサーバーで集中管理でやるのがお薦め、既存のユーザーでも公開鍵のみLDAPサーバーで管理できる