我正在尝试启动一个从 A 到 B 的 ssh 隧道,并让它运行,尽管存在以下情况:A 上的网络/wifi 断线,B 上的远程服务器重启。我的 ssh 隧道在 A 上使用 upstart 脚本启动事件开始于(net-device-up IFACE=eth0)
我发现 autossh 应该可以处理这类事情,但在使用过程中遇到了一些麻烦。upstart 执行:
autossh -M 0 -2qTN -o "ServerAliveInterval 30" -o "ServerAliveCountMax 2" -L 5678:somehost:5678 user@B
但是,当我登录 B 并 kill -9 该隧道会话时,autossh 只会退出并显示“远程主机关闭与 B 的连接”。 这不是我期望 autossh 执行的操作。
关于如何设置,有什么建议吗?有没有 GUI 服务监控实用程序,如果服务启动,它会显示绿灯?
谢谢。
答案1
也许与屏幕结合会有所帮助。对于自动重新连接,您还需要密钥认证。
我创建了一个别名:alias sshtunnel='TERM=xterm ssh servername -a -x -t /opt/local/bin/screen -xRR -A -e^Zz -U -O -S tunnelToServer' Screen 确保您的终端会话处于活动状态。
最后一步是创建一个检查主机并再次启动别名的脚本:$ while :; do while ! ping -c1 -t1 server >/dev/null; do sleep 10; done; sshtunnel; echo 与服务器的连接在 $(date) 时断开;sleep 10; done
这应该可以承受所有网络中断。您也可以尝试调整睡眠时间。
如果您调用 screen -ls ,您将找到名为“tunnelToServer”的屏幕会话。