SSH Tunnel mit autossh

mit dem Programm autossh lässt sich sehr einfach ein SSH Tunnel einrichten der sich auch bei einem Disconnect automatisch wieder verbindet.
Dazu benötigt man lediglich das autossh Paket einen Localen User für autossh und am besten einen Remote User auf dem Remote System

Autossh installieren

apt-get install autossh

Auf dem Rechner wovon der Tunnel etabliert werden soll legen wir den User autossh an und erstellen einen SSH Key.

Autossh User erstellen

useradd --create-home --shell /bin/bash autossh

Anschließend wechseln wir zu dem User autossh und erstellen seinen SSH Key.

su - autossh
ssh-keygen

Dieser SSH Key wird verwendet um sich mit dem anderen Rechner zu verbinden.

Init Script erstellen

Als root erstellen wir folgendes /etc/init.d/autossh_to_host Script mit dem der Tunnel automatisch beim Start des Rechners aufgebaut wird.

nano /etc/init.d/autossh_to_host
#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          autossh
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop a autossh tunnel
# Description:       Creates a SSH Tunnel
### END INIT INFO
#

# config

AUTOSSH="/usr/bin/autossh -M 20009 -f"
TUNNEL="-N -R REMOTE-PORT:127.0.0.1:LOCALER-PORT -p 22 -i ~/.ssh/id_rsa REMOTE-USER@REMOTE-HOST";
USER="autossh"

# check if autossh is installed
test -x /usr/bin/autossh || exit 0

# autossh config
export AUTOSSH_GATETIME=30
export AUTOSSH_POLL=15

case "$1" in
    start)
        echo "Starting autossh tunnel"
        su $USER -c "$AUTOSSH $TUNNEL"
        ;;
    stop)
        echo "Stopping autossh tunnel"
        killall -u $USER
        ;;
    restart)
        $0 stop && sleep 2 && $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}" >&2
        exit 3
        ;;
esac
exit 0

In dem Script müssen folgende angaben gemacht werden.

  • REMOTE-PORT – zb. 1514
  • LOCALER-PORT – zb. 514
  • REMOTE-USER – zb. autossh
  • REMOTE-HOST – zb. hostname.domain.tld

Das Script ausführbar machen und automatisch starten lassen

chmod 755 /etc/init.d/autossh_to_host
update-rc.d autossh_to_host defaults

In dem Script ist der User autossh hinterlegt mit dem der Tunnel aufgebaut wird. Falls ein andere User verwendet wird, muss dieser auch hinterlegt werden.
Zu beachten ist das der Stop einen killall ausführt. Also sollte der User für autossh nicht gerade root sein :)

Ich empfehle auch auf dem REMOTE-HOST einen eigenen REMOTE-USER anzulegen und nicht root zu benutzen. Aber das muss jeder selber wissen.
Schlussendlich testet man das ganze als autossh user und fügt somit auch gleich den Host key des REMOTE-HOST hinzu.

su - autossh
ssh -N -R REMOTE-PORT:127.0.0.1:LOCALER-PORT -p 22 -i ~/.ssh/id_rsa REMOTE-USER@REMOTE-HOST

Wenn das funktioniert hat kann man den SSH Tunnel als root über das init Script starten und stoppen

service autossh_to_host start

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*