虽然这不是一个真正的编程问题,也许任何人有任何关于我的问题的想法。
这很奇怪。 当我通过ssh远程连接我们的一台ubuntu服务器时,连接可以毫无问题地build立起来。
我login并input在控制台上产生输出的内容,如“ls -al”。 然后连接只是挂起。 如果我input“ls”,它会显示输出。 如果我input“dmesg”会话也会崩溃。
在服务器日志中没有任何东西,我身边的terminal不能识别刚刚挂起的连接。
现在我想知道这是否可以与防火墙相关。 如果有很多输出发回它崩溃。
或者,也许我们的一个程序员搞砸了一些东西。 我真的不知道我可以尝试跟踪这个问题。 任何想法呢? 我只是不明白发生了什么事情,如果它涉及到networking问题或系统configuration错误….我不明白为什么“ls”和“ls -al”或“dmesg”之间有区别。 而login在屏幕上也产生了很多输出,但它始终工作。
好吧,我刚刚发现了有关serverfault.com,并在那里张贴我的问题。 这可以被删除,因为这是关键的话题。 Thx反正!
你可能偶然发现了一个PMTU问题。
许多设备具有最大传输单位(MTU),它是可以发送的数据包的最大尺寸。 如果设备看到一个超过这个阈值的数据包,它会将其分解成更小的部分,但是一些数据包有一个特殊的标志,表示不分段(DF)。 这些数据包被丢弃,ICMP消息被发送到发送方,以便发送可以调整数据包本身的大小。
在你的情况下,看起来像是SSH服务器和你之间有东西是丢弃这些数据包,而不是告诉服务器。 如果您有连接的数据包转储,您可能会看到数据包丢失。 在Linux上有一个名为tracepath的工具,可以让你在去服务器的路上看到所有跳转的mtu。
要解决这个问题,你应该在你的服务器驻留的networking中添加一个如下的iptables规则:
iptables -A INPUT -d xxxx/24 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
您可以使用tcpdump来查看它是否是防火墙。 只要确保将端口22过滤到/从远程主机,并且数据包停止通过,就知道这是一个networking问题。
另一件事是清除你的$ HOME /.$ {SHELL} rc文件,以确保在shell访问中没有任何内容导致错误。 特别是检查你的TERMvariables。
你和目标主机之间有一个防火墙,它启用了严格的TCP序列检查。 通过networking的一个或多个分组的延迟导致分组按顺序到达。 防火墙假设这是某种types的攻击(与此相匹配的攻击的例子是会话劫持和会话重放,但也有其他攻击)。 防火墙然后破坏会话。 以下数据包在没有SYN的情况下到达,因此防火墙也会丢弃它们。
顺便说一下,你和目标之间有什么样的防火墙?