我在基于 Debian Lenny 的服务器(它是 Xen 环境中的 vHost,在 Xen 内核上启动)上使用 SSH 时遇到问题。我希望有人能帮助我解决这个问题。
当终端溢出时(新行超出终端底部,通常迫使终端滚动),SSH 连接似乎经常出现问题。连接丢失,但不会定期断开。当我执行以下操作时,这种情况几乎总是发生:
- 现有的 SSH 连接经常断开
- 我命令 putty 重新建立连接
- 登录提示符出现在 Putty 终端窗口的最底部
- 我输入我的登录名,按回车键
- 系统要求我输入密码,我输入密码,按下回车键,然后 BOOM!什么也没发生。我必须重新连接。
因此它是可重复的。
我不完全确定连接是在我输入密码之前还是之后崩溃的。
此外,当需要显示大量文本时也会发生这种情况(例如,当我编译某些内容或在包含许多条目的目录上执行 ls -l 时)。
然而,使用“屏幕”有助于减少发生的频率,但不能完全解决问题。
这种情况的发生与我使用的终端软件无关。我主要使用 putty,但其他客户端也会出现这种情况。
我当然希望有人能帮助我解决这个问题。
提前致谢!
//编辑:我刚刚用 Wireshark 跟踪了 ssh 连接,什么也没有,我再说一遍,没有什么工作连接和故障连接之间的差异(至少除了帧号、端口和时间显然不可能相等之外)。这使我假设错误必须发生在服务器端。
答案1
从您最初的描述来看,似乎某些特殊字符通信被转义,以对 SSH shell 本身造成影响。
您可以尝试以下方法:
- 保持 wireshark 跟踪以检查在出现停顿时 SSH 连接是否实际显示 TCP-FIN 序列(检查退出正常连接时在 wireshark 视图中发生这种情况的情况以供参考)。
- 如果未看到 FIN 序列,则 SSH 已以某种方式停止(未关闭)
- 当你停滞时,请尝试按键顺序Ctrl+Q
您还可以尝试使用这些方法消除特定的端点行为(如果您的设置中可以做到的话),
- 尝试从另一台客户端计算机和同一台服务器进行复制
- 尝试在不同的服务器上使用同一台客户端机器进行复现
- 尝试使用“
-v -v -v
”调试日志选项运行客户端 - 尝试使用“ ”调试日志选项运行服务器
-d -d -d
(查看/var/log/syslog
或/var/log/auth.log
获取服务器调试消息 - 当
screen
您尝试断开连接并重新连接时,它是否会继续停滞:-D -R
屏幕上显示“ ”?
答案2
听起来当您开始达到 TCP 连接的最大数据包大小时,您的连接就会断开。使用 SSH,通常传输的数据相当小,并且远远低于 MTU。
中间是否有防火墙,它会丢弃所有 ICMP 数据包?是否有按 RFC1918 地址空间编号的路由器?
作为一个粗鲁的黑客攻击,如果你以 root 身份在服务器上运行:
ifconfig eth0 mtu 1420
这能缓解问题吗?如果能,则路径 MTU 发现已损坏(某处防火墙配置错误),并且您有一个链接的 MTU 低于每个端点本地链接的 MTU。您还没有解决问题,您只是通过降低服务器端的 MTU 来解决问题。