SSH Reverse Socken Tunnel


26

ssh -D kann einen Socken-Port auf einem lokalen Computer einrichten, der den Datenverkehr an die entfernte Stelle und dann an andere Orte weiterleitet.

ssh -L port:host:hostportÜbergeben Sie den Datenverkehr aus Sicht des Remote-Computers an "host: hostport".

ssh -R port:host:hostportist das Gegenstück zu ssh -L, das den Port auf dem Remote-Computer abhört und den Datenverkehr aus Sicht des lokalen Computers an "host: hostport" weiterleitet.

Aber was ist das Gegenstück dazu ssh -D, dh wie man einen Socken-Port an einem entfernten Rechner öffnet, der den Verkehr zum lokalen und dann zu anderen Orten weiterleitet?


1
Die Frage verliert an Wert, weil Sie eine Antwort akzeptiert haben, die nicht funktioniert und nicht funktionieren kann. Dies (was der Antwortende im Kommentar erwähnte) macht es zwar stackoverflow.com/questions/842021/…
Barlop

Antworten:


12

Mit -D& haben -LSie die Möglichkeit, auf beide Arten zwischen den beiden Maschinen zu kommunizieren.

So...

  • Von der lokalen Maschine, verwendet , -Rum ein Listening - Port auf dem entfernten Rechner auf dem lokalen Computer des sshd darauf zu erstellen.
  • Verwenden Sie -Dauf dem Remote-Computer den oben erstellten Port.

Ich "denke", dass das Ausfüllen des folgenden Formulars funktionieren wird ...

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

' remotehost', ' remoteport' & ' localport' im obigen müssen geändert werden. Ein Socken-Proxy wird auf 9050 gebildet.


Oh, so wie es aussieht, wurde SO gefragt: stackoverflow.com/questions/842021/… Nur die Antwort ist die gleiche Idee. Ich bin mir sicher, dass einer funktionieren wird ;-) EDIT - ja, dieser hat mehr Recht als meiner. Ich habe meinen geflickt.
Teuer

Eigentlich habe ich diese indirekte Methode in meiner eigenen Situation angewendet. Aber in der Situation meines Freundes hatte er nicht das Root-Privileg, also kann er keinen sshd-Dienst haben, er hat nur den OpenSSH-Client. Also möchte ich herausfinden, dass es eine direkte Methode gibt, aber OpenSSH scheint es nicht zu sein ... Danke das gleiche
Berry

1
@barlop und das wird nicht funktionieren , weil Sie sagen, die ssh ausführbare Datei von 10.0.0.10 die -R laufen sagen 10.0.0.10:9050 Aber der SOCKS - Server läuft auf 10.0.0.5 weiterleiten
barlop

1
@PriceChild haben Sie Ihren Befehl tatsächlich getestet?
Barlop

5
-1 Sie haben sich nicht die Mühe gemacht, es zu testen, und Ihr Befehl ist völlig falsch. Sie haben versucht, es wie die andere SO-Antwort zu machen, aber dies ist Ihnen nicht gelungen. SSHing von A nach B, Derjenige, zu dem Sie verlinken, lässt ssh -D auf A lauschen. Ihr Einer lässt es auf B lauschen. Ihr Einer ist falsch. Sie haben den SOCKS-Proxy, der auf der Seite lauscht, die lauscht.
Barlop

14

Kann mit diesem Snippet in ~ / .ssh / config transparent erreicht werden:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

Einzelheiten

Wir wollen einen umgekehrten DynamicForward. Dies wird mit zwei ssh-Befehlen erreicht:

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

Auf diese Weise verfügt das Ziel über einen SOCKS-Tunnel zum SSH-Client.

Was ich getan habe, ist, die klassische Art der Verkettung von ssh zu verwenden, um ein entferntes Ziel über zwischengeschaltete Hosts zu erreichen, sodass die Erstellung des SOCKS-Tunnels während der Anmeldung am Ziel transparent gehandhabt wird. Der erste ProxyCommand + nc-Trick ist obligatorisch, da -W ClearAllForwardings impliziert.


1
Das ist eine Goldmedaille wert.
Dakatine

Können Sie eine detailliertere Erläuterung der Funktionen Ihrer Befehle geben?
Alonso s

3

Es gibt keine Möglichkeit, einen Reverse-Socks-Tunnel mit OpenSSH bereitzustellen. Sie müssen daher den Befehl ssh ausführen, um den Socks-Proxy auf dem "entfernten" Computer bereitzustellen.

Wenn das entfernte Gerät nicht in der lokalen Maschine kann SSH, erstellen eine erste SSH - Verbindung von der lokalen zur fern , die nach vorn Port 22 auf zB 2222. Dann wird die entfernte Maschine kann in der lokalen Maschine an Port 2222 SSH.


2
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

seit OpenSSH 7.6

ssh (1): Unterstützung für Reverse Dynamic Forwarding hinzufügen. In diesem Modus fungiert ssh als SOCKS4 / 5-Proxy und leitet Verbindungen zu Zielen weiter, die vom Remote-SOCKS-Client angefordert werden. Dieser Modus wird mit erweiterter Syntax für die Optionen -R und RemoteForward angefordert und erfordert keine Aktualisierung des Servers, da er ausschließlich auf dem Client implementiert ist.

https://www.openssh.com/txt/release-7.6


Können Sie hierfür eine Referenz angeben?
Scott

Übrigens, es gibt einen Fehler in openssh-client 8.0, bei dem Sie keine Bindungsadresse für port ( ssh -R 127.0.0.3:1080 remote) auswählen können. Sie können derzeit einen Reverse-SOCKS-Proxy nur an einen Port binden .
Adam Katz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.