Autossh 使用 upstart 脚本时出现错误:ssh 过早退出,状态为 0

Autossh 使用 upstart 脚本时出现错误:ssh 过早退出,状态为 0

我已经设置了以下 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 命令时遇到什么错误,但这可能是您选择的端口。

相关内容