SSHエージェント転送の検出


19

エージェント転送を使用して、または使用せずにSSH接続が確立されたかどうかを確認するにはどうすればよいですか?

私は次のことをしようとしています:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

出力を比較しますが、微妙な違いしか見ることができません。


1
:参考までに、この素晴らしい記事をチェックアウトblog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-addをssh-find-agent既存のssh-agentを見つけて使用するためのスクリプトを備えた素敵なGitHubリポジトリを示します。非常に便利です。リポジトリにはREADMEにいくつかの例があります。SSH出力を確認するのではなく、SSH構成ファイルを検査することで、ssh-agentがそのように有効になっているかどうかを検出できる場合があります。
trusktr 16

回答:


21

クライアントで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$

1
これssh-addが私にとってのトリックでした。私はそれを知らずに何ヶ月も働いていました。その後、デスクトップをUnityからLXDEに切り替え、エージェントキーの転送が機能しなくなりました。
マークハドソン

@MarkHudson何らかの理由でLXDEを実行するssh-add場合、新しいコンソールウィンドウを開くたびに実行する必要があります。そこで、そのコマンドラインをの最後に追加し~/.bash_profile、認証エージェントの転送が毎回透過的に動作するようになりました!
ポールバーナル14

@PaulBernal本当にそうする必要はないはずですssh-agent。正しくセットアップしていないと思います。mah.everybody.org/docs/ssh
Michael Mrozekを

1
m2c:ファイル"${SSH_AUTH_SOCK}"はソケットです。テストするにはif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop

4

環境の確認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て、出力がないことを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.