Raspberry Reverse SSH Tunnel

Wird der Raspberry zum Beispiel mit einem Surfstick oder hinter einer Firewall betrieben und möchte man remote auf diesen per SSH oder mit anderen Diensten zugreifen gibt es die Möglichkeit vom Raspberry sich mit einem anderen SSH Server zu verbinden und bestimmte Ports zu tunneln.

Für den SSH Server kann man entweder einen eigenen Raspberry nutzen oder auch zb. Windows Home Server mit BITVISE SSH Server.

AutoSSH

Autossh wird dazu verwendet, die SSH Verbindung immer wieder automatisch herzustellen, wenn sie unterbrochen wurde.

[sourcecode language=“plain“]sudo apt-get install autossh[/sourcecode]

Keypairs erstellen

Auf dem Remote RPI Keys generieren (angemeldeter user : pi)

[sourcecode language=“plain“]cd ~
ssh-keygen -t rsa[/sourcecode]

Public Key auf den Server kopieren und dort installieren bei Windows BitVise SSH Server mit WINSCP übertragen. Ansonsten kann man das auch mit linux mitteln druchführen. (Vorher muss natürlich auf dem Server ein entsprechender User eingerichtet werden)

[sourcecode language=“plain“]ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote-system[/sourcecode]

SSH Test-Verbindung testen

Port (-p) ggf anpassen oder bei Defaultbetrieb weglassen.

[sourcecode language=“plain“]ssh -p443 user@remote-system[/sourcecode]

Login sollte nun automatisch funktionieren.
SSH mit Remote Port forwarding testen:

[sourcecode language=“plain“]ssh -p443 -fNC -R 10022:localhost:22 user@remote-system[/sourcecode]

Komplexe Variante mit folgenden Ports:

[sourcecode language=“plain“]ssh -p443 -fNC -R 11022:localhost:22 -R 11080:localhost:80 -L 18080:localhost:8080 user@remote-system[/sourcecode]

Erklärung:

  • Remote Port 11022 wird zu lokal Raspberry 22 (SSH) geforwardet
  • Remote Port 11080 wird zu lokal Raspberry 80 (HTTP) geforwardet
  • Und vom Raspberry möchten wir Daten an den Server schicken
    Lokaler Port 18080 wird an den Remote Port 8080 geforwardet (HTTP IPS)

Auto SSH Setup

autoSSH baut die verbindungen automatisch wieder auf (Achtung Traffic)

[sourcecode language=“plain“]autossh -p443 -fNC -R 11022:localhost:22 -R 11080:localhost:80 -L 18080:localhost:8080 user@remote-system[/sourcecode]

autoSSH muss aber bei jedem Start geladen werden – hinzu kommt, dass die Key – Dateien beim PI User liegen.

Einfache Lösung wie folgt mit der Crontab des PI Users, dazu ein Startscript schreiben und das in die crontab des pi users eintragen:

[sourcecode language=“plain“]nano ~/autossh_start[/sourcecode]

Folgender Inhalt in autossh_start

[sourcecode language=“plain“]#!/bin/bash
killall ssh
autossh -p443 -fNC -R 11022:localhost:22 -R 11080:localhost:80 -L 18080:localhost:8080 user@remote-system[/sourcecode]

Das Script noch ausführbar machen:

[sourcecode language=“plain“]chmod u+x ~/autossh_start[/sourcecode]

Crontab schreiben:

[sourcecode language=“plain“]crontab -e -u pi[/sourcecode]

Am Ende eintragen:

[sourcecode language=“plain“]@reboot ~/autossh_start[/sourcecode]

Test ob auch in ctrontab drin:

[sourcecode language=“plain“]crontab -l -u pi[/sourcecode]


 

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.