Автосш в фоновом режиме не работает

12

Я установил туннель через autossh.

Это работает:

autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com

Я хотел бы запустить autossh в фоновом режиме. Кажется, легко с помощью -fопции.

Это не работает, однако:

autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com

Autossh работает в фоновом режиме нормально, но соединение ssh, похоже, каждый раз прерывается. В / var / syslog я вижу несколько случаев:

autossh[3420]: ssh exited with error status 255; restarting ssh

Что я делаю неправильно? Дикая догадка - это как-то связано с аутентификацией через файл ключа. Как я могу отладить это (добавление -v к параметрам ssh, похоже, нигде не регистрируется).

Изменить: я получил некоторые логи SSH с помощью опции -y

/usr/bin/ssh[3484]: debug1: Next authentication method: publickey
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_rsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_dsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_ecdsa
/usr/bin/ssh[3484]: debug1: No more authentication methods to try.
/usr/bin/ssh[3484]: fatal: Permission denied (publickey).
autossh[3469]: ssh exited with error status 255; restarting ssh

Поэтому кажется, что autossh не принимает мой файл идентификатора ( -i myIdFile) при использовании опции -f. Это почему?

(Автосш 1.4с на Распиан)

henning77
источник
Зачем вообще использовать autossh? Вы можете использовать systemd для «перезапуска при сбое». Я создал суть с помощью своего решения: gist.github.com/guettli/…
guettli

Ответы:

29

Кажется, что когда autossh переходит в фоновый режим (опция -f), он меняет рабочий каталог, то есть относительные пути больше не работают. Или более конкретно: введя абсолютный путь к вашему файлу id, вы, вероятно, добьетесь успеха.

Я заново создал сценарий, создав ключ без пароля в месте, отличном от заданного по умолчанию:

~/$ mkdir test
~/$ cd test
~/test$ ssh-keygen -f test_id_rsa

Я просто дважды нажимаю клавишу ввода, чтобы создать ключ, который не защищен паролем.

Я скопировал новый ключ на свой сервер (который позволяет аутентификацию по паролю в настоящее время):

~/test$ ssh-copy-id -i test_id_rsa user@server

Сначала я подтвердил, что ключ работает с обычным ssh, а затем использовал autossh, как вы:

~/test$ ssh -i test_id_rsa user@server
~/test$ autossh -M 13000 -N -i test_id_rsa user@server
^C

Они оба работали нормально, поэтому я воссоздал проблему, с которой вы столкнулись:

~/test$ autossh -f -M 13000 -N -i test_id_rsa user@server

Это не сработало, и следующее было написано /var/log/syslog:

autossh [2406]: ssh преждевременно завершил работу со статусом 255; аутосш выход

Изменив путь ключевого файла на абсолютный, он сработал:

~/test$ autossh -f -M 13000 -N -i /home/user/test/test_id_rsa user@server

Нет ошибок в /var/log/syslog.

jmidgren
источник
круто, это работает.
henning77 10.10.13
Вы спасли мой день!
arno_v
2
Опция -N важна, в противном случае вы получите «ssh выход со статусом 0; autossh выход». Благодарность!
user30747
Подтверждено, мне тоже нужно было просто добавить путь к файлу "id_rsa" следующим образом: autossh -M 19001 -fN -y -i /home/pi/.ssh/id_rsa (спасибо @jmidgren)
Rich
4

Не уверен, что происходит с ключом -f, но вы также можете ничего этого не делать:

nohup autossh -M 33201 -N -f -i myIdFile -R 33101:localhost:22 autossh@myhost.com &
Брайан П
источник
nohup у меня работает, даже без указания файла ключа.
Валадил
nohupтакже работал для работы autosshпод runitв Alpine Linux
Стюарт Cardall
0

Добавьте следующие параметры в SSH, чтобы обойти «Вы уверены, что хотите продолжить подключение (да / нет)?»

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

Последняя команда будет в следующем формате:

autossh -f -M $BASE_PORT -N -R $LOCAL_PORT:$LOCALHOST:$REMOTE_PORT $USER@$SERVER -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
Вахид дан
источник
меня устраивает.
bluebird_lboro
Не включайте, StrictHostKeyChecking=noесли вы не подключаетесь к хорошо известной эфемерной игрушке - и вы решаете быть ленивым.
Дольф