我已经设置了以下 upstart 脚本:
# autossh
description "autossh connections"
start on started dbus
stop on (runlevel [06] or stopped dbus)
respawn
respawn limit 5 60 # respawn max 5 times in 60 seconds
script
export AUTOSSH_PIDFILE=/var/run/autossh.pid
export AUTOSSH_POLL=60
export AUTOSSH_FIRST_POLL=30
export AUTOSSH_GATETIME=0
export AUTOSSH_DEBUG=1
exec sudo -H -u pi -s autossh -M 0 \
-R remoteport:127.0.0.1:localport [email protected]
exec sudo -H -u pi -s autossh -M 0 \
-R remoteport2:127.0.0.1:localport2 [email protected]
end script
但每次启动后我都会收到此错误消息:
ssh 提前退出,状态为 0
我该如何修复它?
谢谢
答案1
您需要一个-N
选项,以便它不会创建交互式 shell。
exec sudo -H -u pi -s autossh -M 0 -N \
-R remoteport:127.0.0.1:localport [email protected]
从手册页(man
):
-N Do not execute a remote command. This is useful for just forwarding ports
答案2
通常状态 0 表示成功,但在您的情况下,我认为它表示连接成功,但无法绑定到指定端口时关闭。
如果 remoteport[2] 是特权端口 1-1024,则除非您是 root,否则您将无法绑定到它。您可以更改它,而 localport 仍保持不变。
如果端口上已有监听程序,那么您也无法绑定到该程序。
如果我的上述回答不是 100% 准确,您应该做的第一件事就是使用 ssh 手动连接(删除 -M,添加 -v):
ssh -v -Rremoteport:127.0.0.1:localport [email protected]
另外,您应该将两个 -R 语句合并为 1 个 ssh 命令,如果它们都连接到同一个服务器,您就不会想将其作为两个来运行,如下所示:
ssh -v -Rremoteport:127.0.0.1:localport -Rremoteport2:127.0.0.1:localport2 [email protected]
查看运行常规 ssh 命令时遇到什么错误,但这可能是您选择的端口。