我正在使用 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
?