OpenSSH系列(扩展三)-关于Forward Agent的使用以及调试
其实这篇博客应该放在前几章来介绍, 只是我一直没有用过这个功能. 前几天有朋友在Windows上使用一直没成功, 喊我帮忙调试时才具体的使用到这个功能. 深入了解了之后, 我个人感觉不会考虑使用这个功能, 只是这里介绍一下用法以及一些基础应用, 最后整理下安全性问题.
基本原理
在前面的博客中(OpenSSH系列(五)-跳板机与HTTP代理使用), 我介绍了一种使用跳板机的访问内部机器的方案. 下面要介绍的方案与前面的方案略有不同, 请看下面的一张图:

Forward Agent的基本原理类似是将本地的.ssh目录下的私钥临时拷贝到Jump Server中, 然后可以在Jump Server中访问我们的服务器. 注意这里是类似, 实际上并没有完整的拷贝私钥过来,
但是你所拥有的权限和拷贝过来无异.
随后的所有内容, 均假定Jump Server为Linux机器.
具体的使用
继续以上面的图为例, 在我的电脑中ssh连接Jump Server, 不同的是, 需要增加-A参数:
1 | > ssh -A JumpServer |
调试
有问题时, 建议自己先ssh -vvv打印日志来查看问题, 咨询时也最好贴上这个日志.
确认自己是否成功Forward Agent
1 | (Jump Server):~# echo "$SSH_AUTH_SOCK" |
可以ssh连接跳板机后, 确认当前是否有这个变量. 如果没有, 就要先检查我的电脑中ssh-agent是否已经启动,
比较简单的确认方法是ssh-add -l是否有正常的返回值.
windows启动git bash时自动启动ssh agent
确认密钥是否增加好
1 | (Jump Server):~# ssh-add -l |
如果这里没有你想要的密钥, 那么需要退出之后, 在本地电脑启动ssh-agent之后, 使用ssh-add添加对应的私钥, ssh连接到jump server
ssh-agent的配置固化
Linux中我一般使用oh-my-zsh, 它有一个ssh-agent的插件, 直接就可以用了, 其他方案你可以自行搜索下.
对比ProxyCommand
从上面的ssh-add的输出来看, 本地中添加到ssh-agent的密钥在Jump Server中均是可以使用的,
而$SSH_AUTH_SOCK这个变量可以直接设置, 也就是说, 如果你的Jump Server是允许多个人访问的,
那么有root权限的用户就可以查找/tmp目录下面的AUTH_SOCK文件, 从而使用你的私钥, 这是一种极不安全的行为.
反观ProxyCommand, 本身并没有拷贝任何数据, 而是利用Jump Server做了一层tcp连接的转发,
甚至Jump Server都无法得知传输的内容, 从安全性上讲, ProxyCommand是一种相对安全的方案.
ProxyCommand除了带来安全性方面的提升, 还拥有一些Forawrd Agent没有的功能, 比如正向代理端口转发,
自定义config文件, 更有趣的是, 它还支持多层Jump Server. 功能性方面, ProxyCommand的功能也相对丰富.