SSH-tunnelin pitäminen ylhäällä autossh:lla

Pätkivissä internet-yhteyksissä ssh-tunnelien pitäminen ylhäällä voi osoittautua melko työlääksi touhuksi. Tämän ongelman voi kuitenkin ratkaista käynnistämällä autossh-ohjelman systemd:llä. Tällä tavalla tunneli luodaan automaattisesti kun tietokone käynnistetään sekä pidetään ylhäällä aina kun intenert-yhteys löytyy.

Tiedostoon /etc/systemd/system/autossh@.service:

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

[Service]
User=tunnel
# no monitoring
Environment="AUTOSSH_PORT=0"
# Disable gatetime behaviour
Environment="AUTOSSH_GATETIME=0"
EnvironmentFile=/etc/default/autossh@%i
RestartSec=3
Restart=always

# -NT Just open the connection and do nothing (not interactive, no tty alloc)
# use /usr/bin/ssh instead of autossh is good as well
ExecStart=/usr/bin/autossh -NT -o "ExitOnForwardFailure=yes" $SSH_OPTIONS ${TARGET_HOST} $FORWARDS
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target

Tässä siis luetaan ympäristön konfiguraatio tiedostosta /etc/default/autossh@%i, missä i on jokin merkkijono, esimerkiksi ssh-palvelun nimi. Ympäristön konfiguraatio taas on seuraava:

# Options for autossh@host1.service
# Place it at /etc/default

# Save all your credential/user/port related config in ~/.ssh/config is strongly recommanded
# Leave hostname here only
TARGET_HOST=kayttajatunnus@domain.com

# -L LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM
# can set multiple forwardings here
FORWARDS=-D8080

# === Settings below for ADVANCED users only ===

SSH_OPTIONS=-o "ServerAliveInterval=180" -o "ServerAliveCountMax=60"
AUTOSSH_PORT=0
AUTOSSH_GATETIME=0

Tässä tapauksessa tehdään dynaaminen tunneli porttiin 8080 (SOCKS). Eli komento joka lopulta suoritetaan on:

/usr/bin/autossh -NT -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval=180" -o "ServerAliveCountMax=60" kayttajatunnus@domain.com -D8080

Vastaavalla tavalla voidaan rakentaa SSH-tunneli esimerkiksi serverin MySQL-tietokantaan, mikäli vain lokaalit yhteydet on sallittu, mikä tyypillisesti on tilanne.

Tunnelin tilaa voidaan tarkastaa ja säätää systemctl-komennolla. Tunnelin automaattinen käynnistys kun tietokone käynnistetään:

systemctl enable autossh@palvelun_nimi

Tunnelin käynnistys välittömästi:

systemctl start autossh@palvelun_nimi

Tunnelin tilan tarkastus:

systemctl status autossh@palvelun_nimi