Обычный "ssh -L" рвётся: сеть пропала, ноут ушёл в сон — туннель умер. Тулза autossh следит за соединением и сам перезапускает его. Незаменим для баз, Grafana, внутренних API — всего, что должно «всегда работать».
Установка:
sudo apt install autossh
Быстрый старт:
Достаточно заменить привычную команду ssh -L на autossh, добавив пару опций. Например, вместо:
ssh -L 5432:localhost:5432 user@111.111.111.111
Пишем:
autossh -M 0 -fN -L 5432:localhost:5432 user@111.111.111.111
Параметры тут важны. Флаг "-fN" означает запуск в фоне без запуска удалённой команды. Флаг "-M 0" отключает echo-порт, чтобы не мешал, — вместо него autossh будет использовать настройки keep-alive из SSH-конфига.
Надёжность через keep-alive:
Чтобы autossh действительно знал, когда туннель умер, нужно включить keep-alive. Добавьте в "~/.ssh/config":
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
Теперь SSH будет каждые 30 секунд отправлять пинг на сервер. Если три пинга подряд не получат ответа, соединение считается мёртвым - и autossh запустит его заново.
Примеры из практики:
Обратный туннель (если сервер стоит за NAT или роутером):
autossh -M 0 -fN -R 2222:localhost:22 user@111.111.111.111
На VPS теперь можно выполнить ssh -p 2222 localhost — и попасть внутрь домашнего сервера, как будто он сам подключился. SOCKS-прокси с автопереподключением:
autossh -M 0 -fN -D 1080 user@111.111.111.111
Выставляете localhost:1080 в браузере - и получаете надёжный прокси, который не развалится при первой же потере Wi-Fi.
Автозапуск с systemd:
Если туннель нужен всегда (например, при старте сервера) — стоит обернуть autossh в systemd-сервис:
# /etc/systemd/system/db-tunnel.service
[Unit]
Description=Persistent SSH tunnel to prod DB
After=network-online.target
Wants=network-online.target
[Service]
User=deploy
ExecStart=/usr/bin/autossh -M 0 -N -L 5432:localhost:5432 deploy@db-host
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Активировать можно одной командой:
sudo systemctl enable --now db-tunnel.service
Теперь туннель поднимется при загрузке сервера и будет перезапущен, если вдруг упадёт.
Вывод:
autossh незаметный, но жизненно важный инструмент. Просто заменяешь ssh на autossh, и туннель больше не рвётся. Настроил один раз - и забыл, что раньше ты делал это вручную.
LinuxCamp | #utils