Не корректно работает служба для автоматического поднятия SSH туннеля?

Ссылка скопирована
1 ответ

Здравствуйте.

Задача сделать так что бы сервер HA за стал доступен из интернета.
У меня IP серый, но есть арендованный сервер с белым IP.
Само решение проблемы нашел быстро, сейчас могу поднять SSH туннель с помощью такой команды.

autossh -fgNR 2225:localhost:8123 -M 0 -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval=60" -o "ServerAliveCountMax=5" -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" username@123.123.123.123 -p 22

И все работает корректно.

Но не могу настроить службу которая бы автоматически запускала туннель при сбое или перезагрузке.

Пытался настроить так
--------------------------------------
[Unit]
Description=Autossh_HA
After=network.target

[Service]
Environment="AUTOSSH_GATETIME=0"
Environment="AUTOSSH_LOGFILE=/var/log/autossh"
ExecStart=autossh -fgNR 2225:localhost:8123 -M 0 -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval=60" -o "ServerAliveCountMax=5" -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" user@xxx.xxx.xxx.xxx -p 22
TimeOutSec=10
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
---------------------------------------------------

Вот такой статус выдает служба

Не корректно работает служба для автоматического поднятия SSH туннеля?

Вот что в логах

Не корректно работает служба для автоматического поднятия SSH туннеля?

Дополнительно:

У вас в systemd-сервисе autossh запускается от имени root.
Наиболее вероятно, что у вас для пользователя root:

  1. Используется другой SSH-ключ (или он отсутствует)
  2. Нет записи отпечатка сервера в known_hosts

нужно как минимум выкинуть ключ f из команды запуска, который несовместим с systemd

  • Отлично!

    Видимо это не "как минимум", а вообще все что нужно было сделать, служба начала работать.

    Можете уточнить почему при вводе команды вручную все работало, а при вызове через службу ключ f мешал?

  • NekoGami, ЕМНИП при использовании -f оно форкается и завершается (что хорошо для командной строки — уходит в фон), а systemd ожидает, что основной процесс будет работать пока не упадёт
    теоретически можно поиграться с Type, но где-то когда-то читал, что systemd такое не рекомендует
  • IvanU7n,
    Спасибо.
  • NekoGami, если помогло, отмечайте решением

Ответы:

В [Service] пропиши Type=simple. И ещё, а как работает autossh? Он свой процесс крутит, или форкает новый? Может, ему нужен Type=forking?
А заодно посмотри, может, стоит указать User, от имени которого будет исполняться ssh-туннель.

Если что, journalctl -xe покажет последние логи - поищи там упоминания своего сервиса.

  • Установил тип simple(хотя он же вроде по умолчанию и должен таким быть).
    А пользователя root.
    Ничего не изменилось.

    journalctl -xe выдает вот такие данные.

    Не корректно работает служба для автоматического поднятия SSH туннеля?

  • А не кое что изменилось.
    Теперь соединение появляется, но быстро исчезает.
    Работает примерно 5 секунд потом 10-15 секунд перерыв.

    P.S.
    Все перестало появляться совсем. Несколько минут так нестабильно работал и совсем заглох.

  • NekoGami, а если таймаут убрать? И ещё, а как работает autossh? Он свой процесс крутит, или форкает новый? Может, ему нужен Type=forking?
    Ну и наконец, а зачем autossh и почему нельзя обойтись просто ssh? systemd вполне справится с перезапуском.
  • Vindicar,
    "а если таймаут убрать?"
    Если таймаут убрать там возникала ошибка что то о том что слишком быстрые или слишком частые перезапуски.

    "И ещё, а как работает autossh? Он свой процесс крутит, или форкает новый? Может, ему нужен Type=forking?
    Ну и наконец, а зачем autossh и почему нельзя обойтись просто ssh? systemd вполне справится с перезапуском."
    Не могу ничего конкретного сказать на счет этого. Я вообще с linux мало знаком, а с ssh вообще всего часа 3 назад познакомился. Увидел в статье в интернете что autossh использовали для подобной цели, и решил тоже его использовать.

    Вообще проблема решена. Оказалось что ключ f нужно было убрать.
    Почему то он мешал запуску туннеля через службу, хотя не мешал запуску вручную.

  • NekoGami, ну цитата из man autossh

    -f' causes autossh to drop to the background before running ssh. The -f flag is stripped from arguments passed to ssh. Note that there is a crucial a difference between -f with autossh, and -f with ssh: when used with autossh ssh will be unable to ask for passwords or passphrases. When -f is used, the "starting gate" time (see AUTOSSH_GATETIME) is set to 0.

    Единственный способ, которым процесс может "drop to background" - это форкнуть(склонировать с себя) процесс потомок, а потом завершиться самому. Как следствие, systemd видел, что запущенный процесс завершился, и решал "ну ок, служба завершилась, надо перезапускать".
    Для таких случаев и нужен Type=forking - но он имеет смысл только если наша служба всегда себя форкает. Если мы можем попросить её не форкаться (в autossh это значит убрать флаг -f), то тогда проще так и сделать, и использовать Type=simple.

  • Vindicar,
    Спасибо за объяснение.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Для решения проблемы с некорректной работой службы для автоматического поднятия SSH туннеля, следует выполнить следующие шаги:

1. Проверьте правильность настроек конфигурации SSH туннеля. Убедитесь, что вы правильно указали адрес хоста, порт, логин и пароль.

2. Убедитесь, что ваш SSH сервер доступен из текущей сети. Попробуйте подключиться к серверу вручную с помощью команды ssh через терминал.

3. Проверьте права доступа к файлам и папкам, связанным с настройками SSH туннеля. Убедитесь, что служба имеет достаточные права для чтения и записи в эти файлы.

4. Проверьте логи службы для выявления возможных ошибок или проблем. Обычно логи находятся в определенной папке на сервере.

5. Попробуйте перезапустить службу для автоматического поднятия SSH туннеля. Иногда простой перезапуск может решить проблему.

В случае, если проблема не решается после выполнения вышеперечисленных шагов, рекомендуется обратиться к документации по использованию данной службы или обратиться за помощью к специалистам по работе с SSH туннелями.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно