Автоматический подъем и рестарт ssh-туннелей (systemd+autossh)
Добавлено: 07 сен 2022, 14:00
Появилась потребность держать активным пару туннелей чтоб локальный листенер одного хоста за натом был доступен на другом внешнем.
Можно бы поднять опенвпн сервер, объединить в одну подсеть и держать клиента поднятым, но ради одного-двух портов показалось как-то оверхедно)
С самим туннелированием все норм, например
делает искомое авторизуясь по ключам, поднимая на локалхосте удаленного сервера 1.2.3.4 порт 8443, который смотрит в туннель прямиком на 443 хоста до которого напрямую он бы не достучался.
но обработку обрывов и падений, плюс автостарт при запуске системы было решено добавить service-юнит и
после чего
И будет подниматься сам, и рестартиться на события потери сети или падения ssh процессов какой либо из сторон.
Можно бы поднять опенвпн сервер, объединить в одну подсеть и держать клиента поднятым, но ради одного-двух портов показалось как-то оверхедно)
С самим туннелированием все норм, например
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 процессов какой либо из сторон.