我正在使用 upstart 来保持反向 ssh 隧道处于活动状态,使用自动 ssh 类似于使用 Upstart 管理 AutoSSH 反向隧道。
这很好,但在手动关闭电源后,我无法再使用隧道通过“中央服务器”连接到机器。我收到“ssh_exchange_identification:远程主机关闭连接”。autossh 进程是在客户端上运行。重新启动网络后,我可以再次连接。
我正在尝试弄清楚为什么手动关闭后隧道总是失败。我是否需要在启动时进行一些清理,以便隧道在这种情况下正常工作,或者我可以采取其他一些调试/故障排除步骤来确定问题?
机器 A 是客户端机器,使用 autossh。这台机器位于防火墙后面,并在 upstart 中使用以下命令创建 ssh 隧道:
/usr/bin/autossh -fN -i /keyfile -o StrictHostKeyChecking=no -R 20098:localhost:22 user@centralserver
我们将机器 B 称为“中央服务器”,它位于云端,是主机。在上面的命令中,这台机器是“centralserver”。
当机器 A 硬关闭并重新打开时,我无法通过从我的机器(C)通过 SSH 连接到云中的机器 B,然后使用以下命令访问机器 A:
ssh -p 2098 user@localhost
同样,在重新启动客户端 (A) 后,一切正常。只有在硬断电后才会出现问题。断电并重新启动后,客户端计算机 (A) 上会运行 autossh 进程,但它们似乎没有发挥作用。
答案1
确实,当运行 autossh 的客户端无法正常关闭时,服务器上仍存在 ssh 实例。要解决此问题,请尝试终止这些实例。我使用了它,killall -u
并且有效。之后,autossh 成功重新连接到服务器,我可以通过 ssh 连接到客户端。在运行 autossh 的客户端上,我还设置了参数AUTOSSH_GATETIME=0
。
答案2
问题是系统无法正常关闭。我安装了酸度它在 /etc/acpi 中添加了一个 powerbtn.sh 脚本,当按下电源按钮时会调用关机。
答案3
我发现这个教程很有用并且简单易懂:
http://jiang925.com/content/tunnel-through-firewall-using-reverse-ssh-and-vpn-dd-wrt
他们将 autossh 命令添加到 /etc/rc.local,以便在启动时执行它。