当终端溢出时,SSH 有时会破坏连接?

当终端溢出时,SSH 有时会破坏连接?

我在基于 Debian Lenny 的服务器(它是 Xen 环境中的 vHost,在 Xen 内核上启动)上使用 SSH 时遇到问题。我希望有人能帮助我解决这个问题。

当终端溢出时(新行超出终端底部,通常迫使终端滚动),SSH 连接似乎经常出现问题。连接丢失,但不会定期断开。当我执行以下操作时,这种情况几乎总是发生:

  • 现有的 SSH 连接经常断开
  • 我命令 putty 重新建立连接
  • 登录提示符出现在 Putty 终端窗口的最底部
  • 我输入我的登录名,按回车键
  • 系统要求我输入密码,我输入密码,按下回车键,然后 BOOM!什么也没发生。我必须重新连接。

因此它是可重复的。

我不完全确定连接是在我输入密码之前还是之后崩溃的。

此外,当需要显示大量文本时也会发生这种情况(例如,当我编译某些内容或在包含许多条目的目录上执行 ls -l 时)。

然而,使用“屏幕”有助于减少发生的频率,但不能完全解决问题。

这种情况的发生与我使用的终端软件无关。我主要使用 putty,但其他客户端也会出现这种情况。

我当然希望有人能帮助我解决这个问题。

提前致谢!

//编辑:我刚刚用 Wireshark 跟踪了 ssh 连接,什么也没有,我再说一遍,没有什么工作连接和故障连接之间的差异(至少除了帧号、端口和时间显然不可能相等之外)。这使我假设错误必须发生在服务器端。

答案1

从您最初的描述来看,似乎某些特殊字符通信被转义,以对 SSH shell 本身造成影响。
您可以尝试以下方法:

  1. 保持 wireshark 跟踪以检查在出现停顿时 SSH 连接是否实际显示 TCP-FIN 序列(检查退出正常连接时在 wireshark 视图中发生这种情况的情况以供参考)。
    • 如果未看到 FIN 序列,则 SSH 已以某种方式停止(未关闭)
  2. 当你停滞时,请尝试按键顺序Ctrl+Q

您还可以尝试使用这些方法消除特定的端点行为(如果您的设置中可以做到的话),

  1. 尝试从另一台客户端计算机和同一台服务器进行复制
  2. 尝试在不同的服务器上使用同一台客户端机器进行复现
  3. 尝试使用“ -v -v -v”调试日志选项运行客户端
  4. 尝试使用“ ”调试日志选项运行服务器-d -d -d(查看/var/log/syslog/var/log/auth.log获取服务器调试消息
  5. screen您尝试断开连接并重新连接时,它是否会继续停滞:-D -R屏幕上显示“ ”?

答案2

听起来当您开始达到 TCP 连接的最大数据包大小时,您的连接就会断开。使用 SSH,通常传输的数据相当小,并且远远低于 MTU。

中间是否有防火墙,它会丢弃所有 ICMP 数据包?是否有按 RFC1918 地址空间编号的路由器?

作为一个粗鲁的黑客攻击,如果你以 root 身份在服务器上运行:

ifconfig eth0 mtu 1420

这能缓解问题吗?如果能,则路径 MTU 发现已损坏(某处防火墙配置错误),并且您有一个链接的 MTU 低于每个端点本地链接的 MTU。您还没有解决问题,您只是通过降低服务器端的 MTU 来解决问题。

相关内容