我有一系列的问题,都是为了解决一个难题。
背景:我使用外部VPS(我们称服务器“服务器”和它连接到“隧道机器”的VPS)的防火墙反向隧道后面有一个服务器。 SSH隧道将随机死亡。 我在服务器上有一个脚本来重新连接,但不幸的是,隧道机器(运行CentOS 6.5)上的SSHD守护进程通常不会closures。 它只是保持打开,这意味着反向隧道不能绑定到端口。
我已经在隧道机器上将ClientAliveInterval设置为15,将ClientAliveCountMax设置为2,以便强制服务器在超过30秒的时间内退出监听。 有时候它起作用,有时候不起作用。 在很多情况下,它将永远坐在那里,永远在港口停留,因为它不会停止,因为它不会放弃港口,ssh不能绑定到他们。
我也有两个第二个问题。 当我不可避免地得到Write failed: Broken pipe服务器上的ssh命令中的Write failed: Broken pipe ,它不会尝试重新连接。 SSH只是坐在那里等待input。 同样, Connection to xxx.xxx.xxx.xxx timed out while waiting to write的消息Connection to xxx.xxx.xxx.xxx timed out while waiting to write有时会出现。 在客户端,我有ServerAliveInterval 15和ServerAliveCountMax 4,所以它等待1分钟,然后再尝试重新连接。 但是,这还不够,因为这个消息可能导致SSH无限期挂起。 对于远程端口转发失败警告,我使用-o ExitOnForwardFailure=yes确保SSH在接收到其中一个警告时死亡,确保脚本知道失败并可以重试。 但对于Write failed: Broken pipe和其他我找不到任何这样的选项,每次出现这些错误之一,SSH永远不会死,而且不会重新启动。
首先,当sshd进程失去连接时,会出现什么情况?第二,如何确保每次断开连接或发出警告都会导致SSH终止以确保它可以尝试重新连接?
另外,是的,在任何人提到它之前:我已经尝试过autossh,并且遭受这些完全相同的缺点。