检测SSH代理转发

sha*_*unc 21 ssh

如何确定是否已建立有代理转发的 SSH 连接?

我正在尝试执行以下操作:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something
Run Code Online (Sandbox Code Playgroud)

并比较输出,但我只能看到细微的差异。

Tor*_*ian 23

当在客户端 ( ForwardAgent yeson ~/.ssh/config)上启用 ssh 代理转发并在远程服务器上启用时AllowAgentForwarding yes,当登录到远程服务器时,环境变量SSH_AUTH_SOCK应该存在。然后,如果您登录到另一台服务器(您的公钥必须位于这台第三台服务器上),则不应提示您输入任何密码。

澄清:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
Run Code Online (Sandbox Code Playgroud)

  • `ssh-add` 就是对我有用的。我已经工作了几个月而不知道这一点。然后我将桌面从 Unity 切换到 LXDE,代理密钥转发停止工作。 (3认同)

udo*_*dan 6

检查环境SSH_AUTH_SOCK有利于直接 ssh 连接。

如果您使用代理 ( proxy_command),您的连接可能如下所示:

local-> hostA-> hostB-> hostC->hostD

如果代理转发在所有这些主机上都处于活动状态,则将在所有主机SSH_AUTH_SOCK上设置并“包含”您的 ssh 密钥local

现在假设代理转发在 上禁用hostB但在上启用hostCSSH_AUTH_SOCK将被设置,hostD但它实际上是“空的”。当然,代理被转发,但仅从hostCto转发hostD。链条断了。

现在要检查密钥是否真的可用,hostD您只需调用ssh-add. 在任何情况下它都会以代码 1 退出,但如果密钥不可用,它将显示在stderr

无法打开与您的身份验证代理的连接。

因此,您可以检查SSH_AUTH_SOCK加号以确保ssh_add没有输出。