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.