Reverse SSH Tunnel mit systemd

2021-10-06

Wenn man im Netz nach autostart reverse ssh tunnel sucht findet man oft Einträge zu autossh. Seit systemd ist autossh allerdings obsolet.

Konfiguration

Man kann sich einfach für systemd eine Unit Konfiguration erzeugen. Einfach eine Datei mit folgendem Inhalt anlegen.

/etc/systemd/system/ssh-tunnel.service

[Unit]
Description=Reverse SSH tunnel to externerServer.de
After=network-online.target

[Service]
User=username
ExecStart=/usr/bin/ssh -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o ExitOnForwardFailure=yes -NR 8888:localhost:9999 -NR 1883:localhost:1883  user@externerServer.de

RestartSec=30
Restart=always

[Install]
WantedBy=multi-user.target

In diesem Beispiel werden sogar zwei Reverse Tunnel aufgebaut zu einem Endpunkt. Es würde ein -NR Konstrukt reichen. Hier landet alles von Port 9999 der Tunnel erzeugenden Maschine auf 8888 der Zielmaschine.

Anschließend mit

systemctl enable ssh-tunnel

aktivieren (ssh-tunnel entspricht hier dem Dateinamen der Unit Konfiguration).

Fehlersuche

Falls die Verbindung nach einem Neustart nicht zustande kommt. Einfach mal als User aus der Unit Konfiguration einloggen und versuchen mit dem ExecStart Kommando den Reverse Tunnel manuell aufzubauen bis alles wie gewünscht funktioniert.

sshsystemd

Poor Mans Webserver "ohne" öffentliche IP

Serielle Kommunikation ohne screen, minicom, ... parametrieren