Edited at

ssh agent forwardingを行うサーバー側の要点の備忘録

ssh-agent forwardingするのにハマったので備忘録として残す。


ssh agent forwardingとは

ssh agentで登録させた情報を、接続後のssh接続に引き継ぐやり方である

よく、ssh秘密鍵をサーバーにコピーしないで、ssh秘密鍵認証する際に使われる

ssha1.jpg

上図を例にとると、


  • サーバー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を許可する必要がある


sshd_config


AllowAgentForwarding yes


このsshd_configのowner/groupとパーミッションは

root root -rw------- とする

つぎに、sshコマンドする際にAgentForwardingをする


  • 接続毎にコマンドライン許可する場合には -A オプション

  • ユーザー毎にデフォルトで許可する場合には ~/.ssh/config に ForwardAgent yes 設定

  • システム全体でデフォルトで許可する場合には /etc/ssh/ssh_config に ForwardAgent yes 設定
    する必要があるを記載する


接続毎許可

ssh -A (接続先ユーザー)@(接続先サーバー)


ユーザー毎許可


~/.ssh/config

ForwardAgent yes


この~/.ssh/configのowner/groupとパーミッションは

(実行ユーザー) (実行グループ) -rw------- とする


システム全体許可


/etc/ssh/ssh_config

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サーバーで管理できる