Was Sie suchen, ist ein umgekehrter Tunnel. ssh
bietet es durch den -R
Schalter:
-R [bind_address:]port:host:hostport
Specifies that the given port on the remote (server) host is to
be forwarded to the given host and port on the local side. This
works by allocating a socket to listen to port on the remote side,
and whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to host
port hostport from the local machine.
Wie das OP mit seiner Antwort feststellte, lautet die Syntax wie folgt:
$ ssh -f -N -R vvv:localhost:22 w.x.y.z
Beispiel
Ich habe 2 Computer im Netzwerk lappy
und remotey
. Also führe ich den folgenden Befehl aus lappy
:
$ ssh -f -N -R 12345:localhost:22 remotey
Ich kann bestätigen, dass es funktioniert:
$ ps -eaf|grep "[l]ocalhost:22"
saml 27685 1 0 11:10 ? 00:00:00 ssh -f -N -R 12345:localhost:22 remotey
Wenn ich jetzt ssh
separat zum fernen System übergehe remotey
und diesen Befehl ausführe, kann ich sehen, dass es jetzt Verbindungen an Port 12345 auf der lokalen Schnittstelle des fernen Systems akzeptiert:
$ netstat -an|grep :12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
tcp 0 0 ::1:12345 :::* LISTEN
Verbindung testen
Sie können sehen, dass der umgekehrte SSH-Tunnel wie folgt funktioniert.
Einloggen in remotey
[user@lappy ~]$ ssh remotey
Testen Sie den Reverse-Tunnel-Port
[user@remotey ~]$ ssh -p 12345 localhost
sollte jetzt wieder auf lappy sein
user@localhost's password:
Last login: Thu Aug 1 17:53:54 2013
/usr/bin/xauth: creating new authority file /home/user/.Xauthority
[user@lappy ~]$
Ports an anderen Schnittstellen als localhost ( lo
)?
Möglicherweise kratzen Sie sich am Kopf, wenn Sie einen Befehl wie diesen ausführen, der anscheinend nicht funktioniert, oder er wird immer an einen Port auf der localhost ( lo
) - Schnittstelle gebunden .
Beispielsweise:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
HINWEIS: Dieser Befehl fordert Sie auf, Port 12345 @ remotey zu öffnen und alle Verbindungen zu Port 22 @ lappy zu tunneln.
Dann auf fernbedienung:
remotey$ netstat -an|grep 12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
In den sshd
Konfigurationen ist dies nicht möglich. Tatsächlich können Sie ohne diese aktivierte Funktion ( GatewayPorts
) keine ssh
Tunnel-Ports an etwas anderes als localhost binden .
Aktivieren von GatewayPorts
remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no
Bearbeiten Sie diese Datei, um sie zu aktivieren /etc/ssh/sshd_config
:
GatewayPorts clientspecified
Und neu starten sshd
:
remotey$ sudo service sshd restart
Versuchen Sie es jetzt noch einmal und wir sollten den Effekt sehen, nach dem wir suchen:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
Und überprüfen Sie es noch einmal auf der Fernbedienung:
remotey$ netstat -anp | grep 12345
tcp 0 0 192.168.1.3:12345 0.0.0.0:* LISTEN 9333/sshd
HINWEIS: Oben sehen wir, dass der sshd
Prozess jetzt die Schnittstelle mit der IP-Adresse 192.168.1.3 auf Verbindungen an Port 12345 überwacht.
Verbindung testen (part deux)
Jetzt mit unserem veränderten Setup, als wir es diesmal testen. Der Hauptunterschied ist, dass wir uns nicht mehr mit localhost verbinden müssen!
Einloggen in remotey
[user@lappy ~]$ ssh remotey
Testen Sie die umgekehrte Verbindung
[user@remotey ~]$ ssh -p 12345 remotey
sollte jetzt wieder auf lappy sein
root@remotey's password:
Last login: Wed Aug 21 01:49:10 2013 from remotey
[user@lappy ~]$
Verweise