„SSH -R“ Tunel und „autossh“

Eigentlich ist der Router bzw. die Firewall für das Portforwarding zuständig. Es gibt aber Situationen in denen man weder im Router noch in der Firewall Portforwarding selbst einstellen kann. In meinem Fall war es mein RPI der sich  via 3G/4G einwählt. Es besteht zwar die Ports freizugeben allerdings unterbinden die meisten Anbieter den Zugriff von außen.

Um dennoch zugriff von überall auf meinen RPI  zu haben behelfe ich mir in dem ich meinem RPI einen revers SSH Tunnel  zu einem ständig ereichbaren Server (ein Virtueller für ein paar Euro tut es auch) aufbauen lasse.

  • -R gibt an dass die Verbindung „reverse“ aufgebaut werden soll
  • 2222:localhost:22  dass der Tunnel über Port 2222 zum Port 22 aufgebaut wird
  • -N sagt SSH das nur ein Tunnel/Verbindung aufgebaut werden soll aber keine Shell gestartet werden soll
  • & startet den Befehl im Hintergrund

Zum Testen habe ich das -N und & weggelassen. Denn am Anfang wird das Passwort von user abgefragt. Nach eingabe des Passworts erscheint auch gleich die Shell.

Um sicherzustellen das alles funktioniert öffne ich eine zweite Shell und verbinde mich ohne „-R“ mit meinem user direkt auf „meinserver.de“ und bau von dort mit folgendem Befehl eine Verbindung zu meinem RPI auf

wenn der Tunnel steht sollte nun das Passwort für den user „rpiuser“ abgefragt werden. Herzlichen Glückwunsch der Tunnel funktioniert.

So um nicht jedesmal den Tunnel von Hand wieder zubeleben greife ich auf autossh zurück.

AUTOSSH ist ein Monitor für SSH-Verbindungen und stellt Sessions wieder her wenn diese unterbrochen wurden. Dazu muss der Befehl nur geringfühgig angepasst werden.

Nun übernimmt AUTOSSH für uns die Arbeit und übergibt die Verbindungseinstellungen an SSH. Sollte nun die Verbindung (was bei 3G/4G öfter mal vorkommen kann) abbrechen versucht AUTOSSH solange die Verbindung wieder aufzubauen bis eine Verbinung steht.

Das ganze nutzt aber wenig wenn mein RPI Neustartet. Um aber auch nach einem Neustart eine Verbindung zum RPI zuhauhaben muss nur die /etc/rc.local angepasst werden.

Damit autossh erst ausgeführt wird nach dem das Netzwerk verfügbar ist setzte ich ein „sleep 120“ davor.

Alternativ kann man auch folgendes Script in die /etc/rc.local einfügen

 

Jetzt hat auch ein Neustart keine folgen mehr für den Tunnel.