ssh协议差异,显然在ssh 6.x和5.x之间

时间:2014-09-09 21:20:21

标签: linux macos ssh

TL; DR:为什么OpenSSH 6.x的ssh客户端发送字符串" OpenSSH_6.2p2"连接时立即,OpenSSH 5.x客户端不发送任何内容?


我试图通过HTTP / S代理获得ssh隧道。我可以使用http CONNECT请求获得正确隧道连接的TCP连接。它可以在我的Mac OSX 10.9上与SSH客户端一起正常工作,但不适用于运行较旧OSX的旧Mac。

这导致了以下奇怪之处,我无法解释。 (对于熟悉SSH协议的人来说,这可能是一个愚蠢的问题,但在搜索了一下后,我无法找到该协议应该是什么样子的简单解释,并且我希望不必按顺序阅读整个RFC调试这个;因此这篇文章。)


在Mac OSX 10.9上使用OpenSSH_6.2p2:

1号航站楼:

nc -l 127.0.0.1 5000

2号航站楼:

ssh test@127.0.0.1 -p 5000

终端1然后输出:

OpenSSH_6.2p2

所以这个较新的客户端在连接时传输了该字符串。


在CentOS 6.3上使用OpenSSH_5.3p1:

终端1和2命令与上面完全相同。

但是终端1没有输出任何东西。 看起来这个老客户端在连接时没有发送任何内容。


TCP连接本身可以正常工作。这似乎是一种协议差异。但这些都显然是使用SSH"版本2"协议

这两台机器似乎能够毫无困难地相互通信。然而,我的隧道发生了一些奇怪的事情,我试图了解协议正在寻找什么,所以我可以调试。

有谁知道这里发生了什么?或者也许知道哪一方有简单的1,2,3类型解释,哪一方发送了该协议的内容以及有关版本差异的任何信息?

1 个答案:

答案 0 :(得分:1)

这里介绍:https://tools.ietf.org/html/rfc4253#section-4.2

客户端和服务器都应该在连接时发送它们的版本字符串。然而,似乎在早期版本中,客户端在发送它的字符串之前正在等待服务器 - 这看起来像技术上的一个实现细节错误(可能在SSH 6.x中修复)但通常不会在实践中产生问题

如果有人有兴趣,这就是我想要解决的问题:https://github.com/bradleypeabody/proxyman/blob/master/README.md