Hier ein kleiner Tip damit andere auf euer System über ssh connecten können ohne extra eine Portweiterleitung aktivieren zu müssen
ssh -f -N -R remote_port:localhost:22 remoteuser@remote_ip -p22
Wichtig ist hierbei das -R -> "Reverse" ssh tunnel
Also zum Beispiel:
Auf eurem RaspberryPI Zuhause führt ihr folgenden Befehl aus:ssh -fN -R 2048:localhost:22 support@forum-raspberrypi.de -p22
Derjenige der dann zu eurem PI eine Verbindung herstellen soll gibt dann auf dem forum-raspberrypi.de Server das ein: ssh -p 2048 localhost
Wenn man das so startet wird auf remote_ip ein lauschendes Socket auf Port 2048 eingerichtet.
Jede Verbindung die dorthin aufgebaut wird, wird durch den SSH Tunnel auf Port 22 auf ‚localhost‘ weitergeleitet (also der Rechner bei dem man diesen Befehlt eingibt). Allerdings lauscht das Socket nur auf Localhost.. Um das wiederum zu ändern setzt man ein " " vor den remote_port
Erklärung zu den Parametern:
-f : ssh geht in den hintergrund
-N : ssh baut nur den tunnel auf aber baut kein command stream auf
-R : sagt ssh das es ein reverse tunnel aufbauen soll
2048 : ist der port auf den sich das remote system verbindet
localhost:22 : ist die host und port wohin die verbindung getunnelt werden soll (22 wäre der standard port von ssh)
support@ : als welcher benutzer man sich auf remote_ip angemeldet. es kann auch stattdessen -l <benutzer> genutzt werden ( wobei man für <benutzer> etwas einsetzt also zum beispiel: -l user )
-p 22 : ist der ssh port von remote_ip (falls nicht Standard 22 kann man das hiermit abweichend angeben) um eine Verbindung aufzubauen
Noch ein Beispiel:
Mein RaspberryPI zuhause ist der Client. (local)
Ein Rechner im Internet ist der Server, zB ein vServer o.ä. (Remote)
Auf meinem PI zuhause führe ich folgendes aus:
Auf meinem Server im Internet (raspberrypi.roxxs.org) führe ich folgendes aus:
..nun kann ich mich als root Benutzer zuhause auf meinem PI anmelden - und das komplett ohne Portweiterleitung.
Man sollte aber sicherstellen das der ssh Befehl auf dem Client auch weiterhin aktiv ist auch wenn man das Terminal schließt bzw unter Umständen schmiert der Prozess auch mal ab.. Also wärs praktisch dafür ein Script einzurichten und über Crontab jede Minute ausführen zu lassen:
Spoiler anzeigen
#!/bin/bash
# $REMOTE_HOST is the name of the remote system
REMOTE_HOST=raspberrypi.roxxs.org
# $REMOTE_PORT is the remote port number that will be used to tunnel
# back to this system
REMOTE_PORT=1234
# $LOCAL_PORT ist the port number to tunnel to
LOCAL_PORT=22
# $COMMAND is the command used to create the reverse ssh tunnel
COMMAND="ssh -q -f -N -T -R $REMOTE_PORT:localhost:$LOCAL_PORT $REMOTE_HOST"
# Is the tunnel up? Perform two tests:
# 1. Check for relevant process ($COMMAND)
pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND
# 2. Test tunnel by looking at "netstat" output on $REMOTE_HOST
ssh $REMOTE_HOST netstat -an | egrep "tcp.*:$REMOTE_PORT.*LISTEN" > /dev/null 2>&1
if [ $? -ne 0 ] ; then
pkill -f -x "$COMMAND"
$COMMAND
fi
Alles anzeigen
Desweiteren muss bei erneutem ausführen des Befehls auch jedes mal das Remote Password eingegeben werden... Dafür würde sich die Erstellung eines SSH Keyfiles anbieten.
Mehr dazu könnt ihr hier nachlesen:
Permanenter Reverse SSH Tunnel
http://bbrinck.com/post/231856275…port-forwarding
http://www.noah.org/wiki/SSH_tunnel
http://netz10.de/2011/01/10/ssh-tunnel/
http://www.jfranken.de/homepages/joha…_inhalt.de.html
http://www.brandonhutchinson.com/ssh_tunnelling.html
http://www.howtoforge.com/reverse-ssh-tunneling
http://project-run.com/archives/48-SS…-tunneling.html