检测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。它为您提供了一个不错的GitHub存储库,其中包含ssh-find-agent用于查找和使用现有ssh-agent 的脚本,非常方便!该自述文件中有一些示例。您可能能够检测到是否像这样启用了ssh-agent,并且可以检查SSH配置文件,而不用查看SSH输出。
trusktr

Answers:


21

如果在客户端()ForwardAgent yes上启用了ssh代理转发,~/.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$

1
ssh-add就是我的把戏。我已经工作了几个月了,对此一无所知。然后,我将桌面从Unity切换到LXDE,并且代理密钥转发停止工作。
马克·哈德森

@MarkHudson出于某些原因,在运行LXDE时,ssh-add每次打开新的控制台窗口时都必须运行。因此,我将该命令行添加到的末尾~/.bash_profile,现在身份验证代理转发每次都可以透明地工作!
Paul Bernal 2014年

@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
布普

4

检查环境SSH_AUTH_SOCK是否适合直接ssh连接。

如果您使用代理(proxy_command),则可能会出现如下连接:

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

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

现在,假设代理转发已禁用,hostB但已启用hostCSSH_AUTH_SOCK将设置为开,hostD但实际上为“空”。当然,代理转发,但只能从hostChostD。链条坏了。

现在,hostD只需调用即可检查密钥是否确实可用ssh-add。无论如何,它将以代码1退出,但是如果密钥不可用,它将显示在stderr

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.