SSH 连接在两行左右后断开

SSH 连接在两行左右后断开

我实际上遇到了一个有点奇怪的问题。我运行的是 Ubuntu Server 12.04,包含一组最少的软件包:基本系统、sshd 和 IRC 服务器。我必须允许其他人配置服务器以连接到他们的 IRC 网络。但是,他们似乎在两行 ls 或 cat 之后就掉线了。

更奇怪的是,这种情况只发生在这台服务器上,我无法使用 PuTTY 或 ssh 客户端重现这种情况。我应该在哪里诊断这个问题?auth.log显示正常连接和身份验证,但没有提供有关丢弃的任何详细信息。fail2ban 与原始 IP 地址没有任何冲突。

这是一台具有转发端口的虚拟机(它是桥接模式,具有正常的网络连接)。我可以使用 PuTTY 在本地、通过 LAN 以及从远程位置进行连接,没有任何问题。另一个人可以使用sshLinux 进行连接,但会遇到连接中断的情况。

来自客户端的日志

服务器端日志没有显示任何异常。

答案1

在开始之前,请确保两端的系统时间同步。这有助于稍后进行比较。

在两端运行tcpdump,过滤 TCP 端口 22。您提到客户端使用的是 PuTTY,因此我假设是 Windows。您可以获取适用于 Windows 的 wireshark,它具有捕获功能,您可以用它来代替tcpdump

使用tcpdump,您可以这样做:tcpdump -w/tmp/ssh.pcap -s0 -ieth0 port 22。使用 Windows 上的 wireshark,您可以使用 GUI 设置针对端口 22 进行捕获过滤,然后将捕获保存到磁盘。

现在用 wireshark 打开两个捕获。找到断开点。您应该能够看到哪一端发起了连接关闭(FIN 或 RST 连接首先从哪里到达?)

您还可以检查是否有第三方主机(例如路由器或 ISP)干扰了连接。例如,如果您发现有数据包到达但从未从另一端发送,则可以识别出这一点。如果发生这种情况,则很可能是 RST 数据包。

答案2

我遇到了奇怪的 ssh 超时,并使用以下方法解决了它:

sudo sysctl -w net.ipv4.tcp_keepalive_time=50 \
 net.ipv4.tcp_keepalive_intvl=10 \
 net.ipv4.tcp_keepalive_probes=5 

不确定这是否有帮助,但也许值得尝试一下。

答案3

如果没有更好的问题描述就很难说(“丢弃”是什么意思?TCP 拆除?TCP RST?停滞的连接?),但对您的描述的一个可能的解释是路径 MTU 发现可能存在问题......

SSH 常见问题解答:当我从 shell 生成大量输出时,我的 SSH 会话在登录过程中部分挂起……

PMTU(路径 MTU)发现

答案4

我在从 LTS14.04(之前从 12.04 升级)连接到旧的 12.04 服务器时遇到了同样的问题

我发现问题与 MTU 有关,因为运行

sudo ip li set mtu 1480 dev eth0

问题消失了……当你将其设置回 1500 时,问题又会再次出现

(假设您使用有线 eth0 连接)

相关内容