![连接失败时 autossh 转发端口保持打开状态](https://linux22.com/image/1132980/%E8%BF%9E%E6%8E%A5%E5%A4%B1%E8%B4%A5%E6%97%B6%20autossh%20%E8%BD%AC%E5%8F%91%E7%AB%AF%E5%8F%A3%E4%BF%9D%E6%8C%81%E6%89%93%E5%BC%80%E7%8A%B6%E6%80%81.png)
我正在尝试从我的家庭网络建立反向 SSH 隧道。我已经做到了每次重启时 autossh 成功连接一次(且仅一次)。我正在将远程端口转发到我的本地机器,这样我就可以在家外连接。我使用卫星互联网,并且位于双 NAT 防火墙后面,因此直接连接到我的家庭网络是行不通的。
似乎当 ssh 连接第一次断开时,远程计算机上的端口处于打开状态。任何后续重新连接尝试都会失败,因为端口已被使用。除非我重新启动服务器,否则无法重新启动,这不太理想。
使用 Google 或论坛搜索没有任何结果,所以我希望这里有人可以给我指明正确的方向。
我已按照此处的指导配置了服务器和本地机器:
http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh
我的连接脚本摘录如下,包含在 /etc/rc.local 中:
su -s /bin/sh autossh -c 'autossh -M 20000 -f -i /home/autossh/.ssh/id_rsa -N -R 99999:localhost:22 [email protected]'
欢呼并提前感谢任何帮助!
科里
答案1
好吧……部分解决方案,但我仍不确定它是否完全解决。我做了以下更改,至少一夜之间一切仍保持连接。但我不确定会话终止后它是否会成功重新连接。
在远程服务器 sshd_config 中添加以下行:
ClientAliveInterval 600 ClientAliveCountMax 12
修改了 rc.local 脚本以启动 autossh,如下所示(添加了 ServerAliveInterval 和 ServerAliveCountMax 选项):
su -s /bin/sh autossh -c 'autossh -M 20000 -f -i /home/autossh/.ssh/id_rsa -o "ServerAliveInterval 120" -o "ServerAliveCountMax 5" -N -R 99999:localhost:22 [email protected]'
我还发现使用 GatewayPort 进行连接不可靠。而不是:
user@machine1 $ ssh -p 99999 remotehost.com
我直接登录到远程主机,然后连接到本地主机上的端口 99999,ala:
user@machine1 $ ssh remotehost.com
user@remotehost $ ssh -p 99999 localhost
这似乎更可靠。网关端口往往会挂起。但如果我按照上述步骤分两步连接,我仍然可以连接。一旦我有机会查看会话断开后它是否重新连接,我将回复更新。
希望这可以帮助其他人!
科里