ssh 隧道的服务器部分无法检测到客户端关闭的连接

ssh 隧道的服务器部分无法检测到客户端关闭的连接

我正在使用 ssh 隧道通过命令进行端口转发。ssh -fN -R *:443:localhost:443 <public server> 有时,客户端上的 ssh 进程会终止(可能是连接超时),因此我设置了一个脚本,尝试重新连接到服务器。但是,这有时会失败,因为sshd尽管连接已终止,但服务器上的相应进程仍继续存在并占用端口。我希望服务器进程也能检测到这种情况并终止。我尝试将以下几行添加到服务器,但/etc/ssh/sshd_config无济于事:

ClientAliveInterval 30
ClientAliveCountMax 3

使用这些设置,我预计服务器进程会在客户端进程终止后两分钟内终止,但大约 10 分钟后它仍在运行。当我运行netstat -p它时,隧道连接如下所示:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0  18584 <Hostname>:ssh          <ip>:54208              ESTABLISHED 962/sshd: root

除了设置之外,还有什么ClientAlive我可以做的来确保服务器进程检测到断开的连接并终止,从而释放端口以重新建立连接?

答案1

根据 sshd_config 的手册页,TCPKeepAlive yes应该确保

如果网络中断或客户端主机崩溃,服务器将会注意到。这可以避免无限挂起的会话。

但是,这个值是yes默认的。您是否将其设置为no

相关内容