Я создал следующий сценарий выскочки:
# 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 remoteuser@remote.host
exec sudo -H -u pi -s autossh -M 0 -R remoteport2:127.0.0.1:localport2 remoteuser@remote.host
end script
но каждый раз после запуска я получаю такое сообщение об ошибке:
ssh exited prematurely with status 0
Как я могу это исправить?
Спасибо
Вам нужна опция -N, чтобы она не создавала интерактивную оболочку.
exec sudo -H -u pi -s autossh -M 0 -N -R remoteport:127.0.0.1:localport remoteuser@remote.host
От мужчины
-N Do not execute a remote command. This is useful for just forwarding ports
Обычно статус 0 означает, что он был успешным, но в вашем случае я думаю, что это означает, что соединение было успешным, но закрыто, когда не удалось привязаться к указанным портам.
Если remoteport [2] является привилегированным портом 1-1024, вы не сможете выполнить привязку к нему, если вы не являетесь пользователем root. Вы можете изменить его, оставив параметр localport таким же.
Если что-то уже прослушивает порт, вы также не сможете к нему привязаться.
Первое, что вам следует сделать, если мои ответы выше не были на 100% точными, - это подключиться вручную с помощью ssh (удалив -M, добавив -v):
ssh -v -Rremoteport:127.0.0.1:localport remoteuser@remote.host
Кроме того, вы должны объединить оба оператора -R в одну команду ssh, вы не хотите запускать ее как две, если они оба подключаются к одному серверу, например:
ssh -v -Rremoteport:127.0.0.1:localport -Rremoteport2:127.0.0.1:localport2 remoteuser@remote.host
Посмотрите, какие ошибки вы получаете при выполнении обычной команды ssh, но, вероятно, это порт, который вы выбрали.