客户端硬重启后,服务器上的 SSH 转发不会终止

客户端硬重启后,服务器上的 SSH 转发不会终止

我有一台带有 SSHD 的服务器,我使用以下命令(在启动时)通过远程 SSH 客户端连接到该服务器:

while true
do
    ssh user@server -N \
        -o "ServerAliveInterval=60" \
        -o "ExitOnForwardFailure=yes" \
        -L 1234:127.0.0.1:4321 \
        -R 1234:127.0.0.1:4321
done

一切正常,我可以使用两个转发端口。如果我重新启动或关闭并打开客户端或服务器,我最终能够使用转发。

我的问题是,如果我强行关闭客户端(通过虚拟机管理程序或通过echo b > /proc/sysrq-trigger) - 服务器将继续使用前一个进程监听端口 1234 并且不会终止它,因此来自客户端的新连接不会启动(因为端口已被使用并且无法再次绑定)所以转发不起作用。

尝试添加服务器上的配置ClientAliveInterval 60,但如果客户端恢复得更快(比如说 30 秒),那么监听 1234 的旧进程将永远保留,就像恢复的客户端以某种方式满足检查一样,尽管无法使用它。ClientAliveCountMax 1ClientAlive

我该如何修复这个问题,并使转发功能自动运行(而不必终止服务器上的旧监听进程)?

相关内容