我在 ubuntu 20 上有一个远程服务器,而在本地我使用的是 ubuntu 18。这是一个开放式的问题,因为我不确定要发布什么具体内容来诊断我的问题......
我可以毫无问题地通过 ssh 连接到我的远程服务器。但是,如果窗口闲置约 2 分钟,它就会冻结,我无法执行任何操作。我必须不断打开新连接并关闭旧窗口。
这听起来是不是很熟悉?我该如何诊断或纠正?
答案1
您的情况可能需要使用“keep alive”功能,该功能可在服务器 ssh 守护程序中配置。默认情况下,它是禁用的。/etc/ssh/sshd_config
在 20.04 服务器上保留原始文件的副本,然后编辑它,找到以下行并按如下所示进行更改:
改变这个:
#TCPKeepAlive yes
对此:
TCPKeepAlive yes
并将其更改为:
#ClientAliveInterval 0
对此(您提到~120 秒是您的问题点,因此执行 100 秒):
ClientAliveInterval 100
重新启动 sshd 服务或重新启动以使更改生效。
您可以使用 tcpdump 进行测试,观察保持“活动数据包”。但是,您必须在 20.04 服务器上本地运行 tcpdump,否则您将从自己的 SSH 连接中收到大量数据包。示例(每个保持活动数据包 10 秒):
sudo tcpdump -n -tttt
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes
2021-06-04 15:04:57.551414 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 1949276260:1949276320, ack 1484187791, win 501, length 60
2021-06-04 15:04:57.551947 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 1:37, ack 60, win 8208, length 36
2021-06-04 15:04:57.551986 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 37, win 501, length 0
2021-06-04 15:05:07.562203 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 60:120, ack 37, win 501, length 60
2021-06-04 15:05:07.562681 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 37:73, ack 120, win 8208, length 36
2021-06-04 15:05:07.562716 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 73, win 501, length 0
2021-06-04 15:05:17.572944 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 120:180, ack 73, win 501, length 60
2021-06-04 15:05:17.573550 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 73:109, ack 180, win 8208, length 36
2021-06-04 15:05:17.573581 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 109, win 501, length 0
2021-06-04 15:05:27.583815 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 180:240, ack 109, win 501, length 60
2021-06-04 15:05:27.584345 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 109:145, ack 240, win 8208, length 36
2021-06-04 15:05:27.584382 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 145, win 501, length 0
2021-06-04 15:05:37.594578 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 240:300, ack 145, win 501, length 60
2021-06-04 15:05:37.595213 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 145:181, ack 300, win 8207, length 36
2021-06-04 15:05:37.595260 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 181, win 501, length 0
2021-06-04 15:05:47.605476 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [P.], seq 300:360, ack 181, win 501, length 60
2021-06-04 15:05:47.606003 IP 192.168.111.122.53176 > 192.168.111.136.22: Flags [P.], seq 181:217, ack 360, win 8207, length 36
2021-06-04 15:05:47.606039 IP 192.168.111.136.22 > 192.168.111.122.53176: Flags [.], ack 217, win 501, length 0
您也可以在不配置“保持活动”的情况下使用具有不同间隔的 ping 进行测试,即使只是为了确定确切的时间限制。例如:
doug@s19:~/freq-scalers$ ping -i 100 192.168.111.1
PING 192.168.111.1 (192.168.111.1) 56(84) bytes of data.
64 bytes from 192.168.111.1: icmp_seq=1 ttl=64 time=0.210 ms
64 bytes from 192.168.111.1: icmp_seq=2 ttl=64 time=0.269 ms
^C
--- 192.168.111.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 103912ms
rtt min/avg/max/mdev = 0.210/0.239/0.269/0.029 ms
改变间隔来找到故障点。
答案2
只是一个想法。如果您和您的服务器之间有状态防火墙,则它可能配置错误并使用一种缩短 TCP 超时的方法。
当防火墙未检测到连接上的任何流量并因此认为连接已完成时,就会发生 TCP 超时。当客户端尝试使用 TCP 连接时,防火墙不会允许它,因为它正在等待新的 SYN 数据包。
通常,TCP 超时不会配置为少于一小时。
答案3
来自以下文章。终端冻结可以有意或无意地发生。但从您提到的情况来看,它似乎是在不活动后发生的。也许可以尝试按如下方式解冻终端,而不是终止窗口。
- Ctrl您可以通过键入+来冻结 Linux 系统上的终端窗口S
- Ctrl您可以通过键入+来取消冻结Q