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