Автоматический подъем и рестарт ssh-туннелей (systemd+autossh)

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
Chocobo
Сообщения: 10067
Зарегистрирован: 27 авг 2016, 22:57
Решено: 216
Откуда: НН
Благодарил (а): 845 раз
Поблагодарили: 3042 раза
Контактная информация:

Автоматический подъем и рестарт ssh-туннелей (systemd+autossh)

#1

07 сен 2022, 14:00

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

С самим туннелированием все норм, например
ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -R 8443:localhost:443 root@1.2.3.4 -p 22
делает искомое авторизуясь по ключам, поднимая на локалхосте удаленного сервера 1.2.3.4 порт 8443, который смотрит в туннель прямиком на 443 хоста до которого напрямую он бы не достучался.
но обработку обрывов и падений, плюс автостарт при запуске системы было решено добавить service-юнит и autossh.


/etc/systemd/system/autossh@.service

Код: Выделить всё

[Unit]
Description=Keeps an ssh tunnel to %I open
After=network-online.target ssh.service

[Service]
Environment="AUTOSSH_PORT=0"
Environment="AUTOSSH_GATETIME=0"
EnvironmentFile=/etc/default/autossh@%i
RestartSec=3
Restart=always

ExecStart=/usr/bin/autossh -NT -o "ExitOnForwardFailure=yes" $SSH_OPTIONS ${TARGET_HOST} $FORWARDS
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target


/etc/default/autossh@https

Код: Выделить всё

TARGET_HOST=root@1.2.3.4
FORWARDS=-R 8443:localhost:443

SSH_OPTIONS=-o "ServerAliveInterval=10" -o "ServerAliveCountMax=3" -p 22
AUTOSSH_PORT=0
AUTOSSH_GATETIME=0
после чего systemctl daemon-reload и systemctl enable --now autossh@https

И будет подниматься сам, и рестартиться на события потери сети или падения ssh процессов какой либо из сторон.
Изображение
   
Изображение

Ответить

Вернуться в «Работа с сетью»

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и 0 гостей