即使启用 ServerAliveInterval 后 SSH 仍会挂起

即使启用 ServerAliveInterval 后 SSH 仍会挂起

基本上与以下问题相同即使设置了 ServerAliveInterval 60,ssh 仍然挂起,除非我检查配置是否正在使用:

$ man 5 ssh_config | grep -A1 '^\s*ServerAliveInterval'
Sets a timeout interval in seconds after which if no data has been received from the server, ssh(1) will send a message through the encrypted channel to request a response from the server.

$ cat ~/.ssh/config
host myalias
    hostname example.org
    ServerAliveInterval 200

$ ssh myalias 'echo "Greetings from $USER@$(hostname)"'
Greetings from [email protected]

使用 运行 ssh -vvv,连接空闲时什么都没有显示。也许数据包没有被记录,尽管这是(根据手册页)可用的最高调试级别。查看 Wireshark,没有任何数据包通过连接发送。我在输入或服务器发送数据时看到数据包,但在 45 分钟的空闲 shell 期间,没有数据包显示。

使用 时ssh -o ServerAliveInterval=60,数据包确实会显示出来,但每次输入它有点麻烦。也许 bash 别名会起作用,但是... ssh 应该只读取配置。

SSH 客户端版本:OpenSSH_9.2p1 Debian-2

背景:在购买新的消费者路由器后,配置变得必要(垃圾 ISP 吞并了我们订购的优质 ISP,因此现在我们得到了垃圾路由器),该路由器似乎习惯于每隔一段时间(也许 15 分钟?我还在弄清楚这一点)从打开但空闲的连接中修剪其状态表。运行“while :; do date; sleep 300; done”时,连接可以成功保持一整天,因此 keepalive 应该可以解决问题……如果它们仅按配置发送。

相关内容