回答:
クライアントでsshエージェント転送が有効(ForwardAgent yeson ~/.ssh/config)であり、リモートサーバーAllowAgentForwarding yesでも有効になっている場合、リモートサーバーにログインするときに環境変数SSH_AUTH_SOCKが存在する必要があります。次に、別のサーバーにログインする場合(公開キーはこの3番目のサーバーに存在する必要があります)、パスワードの入力を求められません。
明確にするために:
home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
ssh-addが私にとってのトリックでした。私はそれを知らずに何ヶ月も働いていました。その後、デスクトップをUnityからLXDEに切り替え、エージェントキーの転送が機能しなくなりました。
ssh-add場合、新しいコンソールウィンドウを開くたびに実行する必要があります。そこで、そのコマンドラインをの最後に追加し~/.bash_profile、認証エージェントの転送が毎回透過的に動作するようになりました!
ssh-agent。正しくセットアップしていないと思います。mah.everybody.org/docs/ssh
"${SSH_AUTH_SOCK}"はソケットです。テストするにはif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
環境の確認SSH_AUTH_SOCKは、直接のssh接続に適しています。
プロキシ(proxy_command)を使用する場合、次のような接続があります。
local->-> hostA-> hostB-> hostC->hostD
これらすべてのホストでエージェント転送がアクティブな場合、すべてのホストのSSH_AUTH_SOCKsshキーが設定され、「含まれ」ますlocal。
ここで、エージェント転送が無効にhostBなってhostCいるが有効になっているとします。SSH_AUTH_SOCKオンhostDになりますが、実際には「空」になります。もちろんエージェントは、だけから転送されるhostCまでhostD。チェーンが壊れています。
キーが実際に使用可能かどうかを確認するには、hostD単にを呼び出しますssh-add。いずれの場合もコード1で終了しますが、キーが利用できない場合は次のように表示されstderrます。
認証エージェントへの接続を開けませんでした。
そのため、SSH_AUTH_SOCKプラスをチェックしssh_addて、出力がないことを確認できます。
ssh-find-agent既存のssh-agentを見つけて使用するためのスクリプトを備えた素敵なGitHubリポジトリを示します。非常に便利です。リポジトリにはREADMEにいくつかの例があります。SSH出力を確認するのではなく、SSH構成ファイルを検査することで、ssh-agentがそのように有効になっているかどうかを検出できる場合があります。