情况是这样的:我有一个运行 Ubuntu 服务器 14.04 的 Linux 服务器,多台计算机连接到该服务器并使用 SSH 进行身份验证,并尝试打开反向隧道。这些计算机通常没有非常稳定的互联网连接,有时它们会尝试重新连接,而 Linux 服务器仍然认为旧会话仍然打开。然后,计算机将请求打开反向隧道,但 Linux 服务器无法执行此操作,因为仍有另一个会话绑定到该端口。
然后计算机将等待五分钟,然后重试并重试。与此同时,服务器将释放端口,第二次尝试将成功。
这一切都工作得很好,但我想要的是,当反向隧道请求传入并且该端口已被占用时,SSH 守护进程将终止其他会话并接受新隧道。这样的事情可能吗?
如果这是可能的,出于明显的原因,SSH 守护进程应该仅在绑定到它的进程是另一个 SSH 会话时释放端口,但这可以通过其他方式修复(例如允许 SSHD 仅转发某个端口)范围)
任何帮助表示赞赏!
PS 动态端口号不是一个选项。
答案1
那么您希望来自远程主机的新连接能够启动其他连接吗?当另一个客户端主动使用反向隧道时,这可能会导致一些麻烦。
您也许可以使用以下方法分配动态选择的端口:
ssh -R 0:localhost:xxx remotehost
ClientAliveInterval
另一种选择是将该指令/etc/ssh/sshd_config
与该指令一起使用ClientAliveCountMax
。使用这些指令将允许服务器检测客户端连接没有响应并根据您选择的值关闭连接。例如:
ClientAliveInterval 15
ClientAliveCountMax 3 #default value
大约 45 秒后将断开无响应的客户端。
请参阅man sshd_config
了解更多详情。