SSHのエージェントフォワーディングは「sudo」したときは無効になります。
※ hoge へのログインにエージェントフォワーディングは使用されない sudo ssh hoge
↑のような使い方だと意味はありませんが、例えば rsync を over ssh で使っている場合はエージェントフォワーディングが切れると困ることもあります。
※ /path/ に書き込むには root が必要なので sudo した例 ※ rsync から呼ばれる ssh で認証エージェントが使われないため remotehost にログイン出来ない sudo rsync -av remotehost:/path/ /path/
エージェントフォワーディングは、sshログイン後に「/tmp/ssh-xxx/agent.12345」のような名前のソケットファイルを作成し、そのソケットファイルを介してローカル側の認証エージェント(ssh-agent や pageant)と対話することで実現されています。
そのソケットファイルのパスは環境変数 SSH_AUTH_SOCK に記録されており ssh コマンドが勝手に探して使います。
sudo をすると一部を除いて環境変数がクリアされます(sudoers によるけど)。そのため SSH_AUTH_SOCK もクリアされ、対話用のソケットファイルが見つからなくなるため、エージェントフォワーディングが効かなくなります。
visudo で「env_keep」に「SSH_AUTH_SOCK」を追加すれば、sudo しても「SSH_AUTH_SOCK」がそのまま維持されるため、エージェントフォワーディングを有効なままにすることが出来ます。
Defaults env_keep += "SSH_AUTH_SOCK"
もしくは・・・
sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK rsync -av remotehost:/path/ /path/
とかでも大丈夫です(変数の置換は sudo の前に行われるから)。
ということは・・・
1つのホストに複数人がログインしているとき、そのホストで root になれるなら「/tmp/ssh-*/agent.*」のソケットファイルを環境変数 SSH_AUTH_SOCK に設定して他人の認証エージェントを乗っ取ることが出来ます・・・