autossh — Resilient SSH Tunnels

If you like this project, consider supporting me on Buy Me a Coffee ☕️

autossh — Resilient SSH Tunnels

autossh is a program to start an SSH session and monitor it, automatically restarting the SSH session if it drops. It is commonly used for maintaining persistent SSH tunnels (port forwarding) across unreliable networks. It wraps the standard ssh command and adds automatic reconnection logic.

📚 Official Docs / Официальная документация: autossh(1)

🔧 Basic Tunneling / Базовое туннелирование

Local Port Forwarding / Локальная переадресация портов

autossh -M 0 -N -L 8080:127.0.0.1:80 <USER>@<HOST>  # Forward local 8080→remote 80 / Переслать локальный 8080→удалённый 80
autossh -M 0 -N -L 3306:localhost:3306 <USER>@<HOST>  # MySQL tunnel / MySQL туннель
autossh -M 0 -N -L 5432:localhost:5432 <USER>@<HOST>  # PostgreSQL tunnel / PostgreSQL туннель
autossh -M 0 -N -L 0.0.0.0:8080:localhost:80 <USER>@<HOST>  # Bind to all interfaces / Привязать ко всем интерфейсам

Remote Port Forwarding / Удалённая переадресация портов

autossh -M 0 -N -R 2222:127.0.0.1:22 <USER>@<HOST>  # Forward remote 2222→local 22 / Переслать удалённый 2222→локальный 22
autossh -M 0 -N -R 8080:localhost:80 <USER>@<HOST>  # Expose local web server / Выставить локальный веб сервер
autossh -M 0 -N -R 0.0.0.0:9000:localhost:9000 <USER>@<HOST>  # Bind to all remote interfaces / Привязать ко всем удалённым интерфейсам

Dynamic Port Forwarding (SOCKS) / Динамическая переадресация (SOCKS)

autossh -M 0 -N -D 1080 <USER>@<HOST>          # SOCKS proxy on port 1080 / SOCKS прокси на порту 1080
autossh -M 0 -N -D 0.0.0.0:1080 <USER>@<HOST>  # SOCKS proxy on all interfaces / SOCKS прокси на всех интерфейсах

🔄 Persistent Tunnels / Постоянные туннели

Monitoring Options / Опции мониторинга

autossh -M 0 -N -L 8080:localhost:80 <USER>@<HOST>  # Disable monitoring port (recommended) / Отключить порт мониторинга (рекомендуется)
autossh -M 20000 -N -L 8080:localhost:80 <USER>@<HOST>  # Use monitoring port 20000 / Использовать порт мониторинга 20000

ServerAliveInterval / Интервал проверки сервера

autossh -M 0 -N -o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" -L 8080:localhost:80 <USER>@<HOST>
# Check every 30s, fail after 3 attempts / Проверять каждые 30с, упасть после 3 попыток

ExitOnForwardFailure / Выход при ошибке переадресации

autossh -M 0 -N -o "ExitOnForwardFailure=yes" -L 8080:localhost:80 <USER>@<HOST>
# Exit if port forwarding fails / Выйти если переадресация порта не удалась

📊 Monitoring & Debugging / Мониторинг и отладка

Verbose Mode / Подробный режим

autossh -M 0 -N -v -L 8080:localhost:80 <USER>@<HOST>  # Verbose / Подробный
autossh -M 0 -N -vv -L 8080:localhost:80 <USER>@<HOST>  # Very verbose / Очень подробный

Environment Variables / Переменные окружения

export AUTOSSH_DEBUG=1                        # Enable debug / Включить отладку
export AUTOSSH_LOGFILE=/var/log/autossh.log   # Log to file / Логировать в файл
export AUTOSSH_POLL=60                        # Poll interval / Интервал опроса
export AUTOSSH_GATETIME=0                     # No wait before first connection / Не ждать перед первым соединением

Check Connection / Проверить соединение

ps aux | grep autossh                         # Check if running / Проверить работает ли
netstat -tlnp | grep 8080                     # Check port / Проверить порт
ss -tlnp | grep 8080                          # Alternative / Альтернатива

🔧 Systemd Integration / Интеграция с systemd

Create Systemd Service / Создать Systemd сервис

# /etc/systemd/system/autossh-tunnel.service
[Unit]
Description=AutoSSH Tunnel
After=network.target

[Service]
Type=simple
User=<USER>
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N -o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" -o "ExitOnForwardFailure=yes" -L 8080:localhost:80 <USER>@<HOST>
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Manage Service / Управление сервисом

sudo systemctl daemon-reload                  # Reload systemd / Перезагрузить systemd
sudo systemctl start autossh-tunnel           # Start service / Запустить сервис
sudo systemctl enable autossh-tunnel          # Enable on boot / Включить при загрузке
sudo systemctl status autossh-tunnel          # Check status / Проверить статус
sudo journalctl -u autossh-tunnel -f          # Follow logs / Следовать за логами

🌟 Real-World Examples / Примеры из практики

Database Access / Доступ к базе данных

# MySQL tunnel / MySQL туннель
autossh -M 0 -N -L 3306:127.0.0.1:3306 <USER>@<DB_SERVER>
# Connect: mysql -h 127.0.0.1 -P 3306 / Подключиться: mysql -h 127.0.0.1 -P 3306

# PostgreSQL tunnel / PostgreSQL туннель
autossh -M 0 -N -L 5432:localhost:5432 <USER>@<DB_SERVER>
# Connect: psql -h 127.0.0.1 -p 5432 / Подключиться: psql -h 127.0.0.1 -p 5432

# MongoDB tunnel / MongoDB туннель
autossh -M 0 -N -L 27017:localhost:27017 <USER>@<DB_SERVER>
# Connect: mongosh --host 127.0.0.1 --port 27017 / Подключиться: mongosh --host 127.0.0.1 --port 27017

Reverse Tunnel for Remote Access / Обратный туннель для удалённого доступа

# From local machine / С локальной машины
autossh -M 0 -N -R 2222:localhost:22 <USER>@<JUMP_HOST>

# From jump host / С jump хоста
ssh -p 2222 <LOCAL_USER>@localhost

SOCKS Proxy for Browsing / SOCKS прокси для браузинга

# Start SOCKS proxy / Запустить SOCKS прокси
autossh -M 0 -N -D 1080 <USER>@<PROXY_HOST>

# Configure browser / Настроить браузер
# SOCKS5: localhost:1080

# Or use with curl / Или использовать с curl
curl --socks5 localhost:1080 https://api.example.com

Multi-Hop Tunnel / Многошаговый туннель

# Via bastion host / Через bastion хост
autossh -M 0 -N -L 8080:internal-server:80 -J <USER>@<BASTION> <USER>@<INTERNAL>

# Alternative with ProxyJump / Альтернатива с ProxyJump
autossh -M 0 -N -o "ProxyJump=<USER>@<BASTION>" -L 8080:localhost:80 <USER>@<INTERNAL>

Docker API Access / Доступ к Docker API

# Tunnel Docker socket / Туннель Docker socket
autossh -M 0 -N -L 2375:localhost:2375 <USER>@<DOCKER_HOST>

# Use Docker / Использовать Docker
export DOCKER_HOST=tcp://localhost:2375
docker ps

Kubernetes API Access / Доступ к Kubernetes API

# Tunnel K8s API / Туннель K8s API
autossh -M 0 -N -L 6443:localhost:6443 <USER>@<K8S_MASTER>

# Use kubectl / Использовать kubectl
kubectl --server=https://localhost:6443 get pods

Web Development Preview / Предпросмотр веб-разработки

# Expose local dev server / Выставить локальный dev сервер
autossh -M 0 -N -R 8080:localhost:3000 <USER>@<PUBLIC_SERVER>

# Access from: http://<PUBLIC_SERVER>:8080 / Доступ с: http://<PUBLIC_SERVER>:8080

VNC Tunnel / VNC туннель

# Tunnel VNC / Туннель VNC
autossh -M 0 -N -L 5900:localhost:5900 <USER>@<VNC_SERVER>

# Connect with VNC client / Подключиться с VNC клиентом
vncviewer localhost:5900

Redis Tunnel / Redis туннель

# Tunnel Redis / Туннель Redis
autossh -M 0 -N -L 6379:localhost:6379 <USER>@<REDIS_SERVER>

# Connect / Подключиться
redis-cli -h 127.0.0.1 -p 6379

Multiple Tunnels in One Connection / Несколько туннелей в одном соединении

autossh -M 0 -N \
  -L 3306:localhost:3306 \
  -L 5432:localhost:5432 \
  -L 6379:localhost:6379 \
  <USER>@<SERVER>

SSH Config Integration / Интеграция с SSH Config

# ~/.ssh/config
Host tunnel
  HostName <HOST>
  User <USER>
  LocalForward 8080 localhost:80
  ServerAliveInterval 30
  ServerAliveCountMax 3
  ExitOnForwardFailure yes

# Use with autossh / Использовать с autossh
autossh -M 0 -N tunnel

💡 Best Practices / Лучшие практики

🔧 SSH Config Options / Опции SSH Config

Option Description (EN / RU)
ServerAliveInterval Keepalive interval / Интервал keepalive
ServerAliveCountMax Max failed keepalives / Макс неудачных keepalive
ExitOnForwardFailure Exit if forwarding fails / Выйти если переадресация не удалась
LocalForward Local port forward / Локальная переадресация
RemoteForward Remote port forward / Удалённая переадресация
DynamicForward SOCKS proxy / SOCKS прокси

📋 Common Use Cases / Распространённые случаи использования

Use Case Flag
Database access -L 3306:localhost:3306
Web preview -R 8080:localhost:3000
SOCKS proxy -D 1080
Reverse shell -R 2222:localhost:22
VNC access -L 5900:localhost:5900

⚠️ Security Notes / Заметки по безопасности

On this page

autossh — Resilient SSH Tunnels 🔧 Basic Tunneling / Базовое туннелирование Local Port Forwarding / Локальная переадресация портов Remote Port Forwarding / Удалённая переадресация портов Dynamic Port Forwarding (SOCKS) / Динамическая переадресация (SOCKS) 🔄 Persistent Tunnels / Постоянные туннели Monitoring Options / Опции мониторинга ServerAliveInterval / Интервал проверки сервера ExitOnForwardFailure / Выход при ошибке переадресации 📊 Monitoring &amp; Debugging / Мониторинг и отладка Verbose Mode / Подробный режим Environment Variables / Переменные окружения Check Connection / Проверить соединение 🔧 Systemd Integration / Интеграция с systemd Create Systemd Service / Создать Systemd сервис Manage Service / Управление сервисом 🌟 Real-World Examples / Примеры из практики Database Access / Доступ к базе данных Reverse Tunnel for Remote Access / Обратный туннель для удалённого доступа SOCKS Proxy for Browsing / SOCKS прокси для браузинга Multi-Hop Tunnel / Многошаговый туннель Docker API Access / Доступ к Docker API Kubernetes API Access / Доступ к Kubernetes API Web Development Preview / Предпросмотр веб-разработки VNC Tunnel / VNC туннель Redis Tunnel / Redis туннель Multiple Tunnels in One Connection / Несколько туннелей в одном соединении SSH Config Integration / Интеграция с SSH Config 💡 Best Practices / Лучшие практики 🔧 SSH Config Options / Опции SSH Config 📋 Common Use Cases / Распространённые случаи использования ⚠️ Security Notes / Заметки по безопасности