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
的功能也相对丰富.