Ich versuche, einen einfachen TCP-Port über SSH mit Go zu erstellen (und später zu schließen). Ich bin neu in Golang und statisch getippten Sprachen. (Kommt aus Ruby.)
In einem Terminal würde ich einfach ssh -L 9000:localhost:9999 [email protected]
ausführen und das schafft, was ich brauche. Ich möchte dasselbe programmatisch mit Go machen.
Ich habe versucht, dieses Beispiel als Anfang zu verwenden Zeigen Sie und diesen letzten Test um zu versuchen, zu verstehen, was zu tun ist, aber jetzt habe ich einen Stapel verwirrenden Code, wenn es scheint, als ob das eigentlich eine sehr einfache Sache ist.
Jede Hilfe wäre sehr willkommen! : -)
Ich habe endlich herausgefunden, wie das geht, ich habe Hinweise von schmichael in einem IRC-Kanal bekommen. Danke an alle!
EDIT: Eine kleine Erklärung:
Ein großer Teil des Problems, das ich hatte, war, dass ich kein lokales net.Listener
(nicht nur ein lokales net.Conn
) Setup benötigte, um eine lokale Anfrage zu erhalten und das net.Conn
vor dem Weiterleiten der Bytes zu erstellen.
Außerdem gibt es sowohl Port-Forwards als auch Reverse-Port-Forwards, und ich hatte vorher nicht im Detail darüber nachgedacht, dass ein normaler Port-Forward auch Bytes zurücksendet, also war das Kopieren des Remote-Lesers auf den lokalen Writer nicht etwas, das ich implementiert hatte sehr dringend benötigt.
Hier ist ein Versuch, die Essenz dessen, was dieser Code tut, in Beziehung zu setzen:
listener.Accept()
), io.Reader
und io.Writer
und, io.Reader
und io.Writer
. io.Reader
Bytes in remote io.Writer
, io.Reader
bytes in local io.Writer
. Hier ist der Code:
%Vor%Ich habe Ihren (damick) Beispielcode verwendet, um ein kleines Open-Source-Tool zu erstellen: SSHTunnel Ссылка
Daher ist der Code bei GitHub für jedermann frei verfügbar: Bitte benutzen Sie ihn für Lernzwecke oder für etwas anderes :) Ich habe Ihren Spitznamen erwähnt und auch mit dieser Frage verknüpft.
Mit freundlichen Grüßen, Thorsten.
Ich habe ein einfaches SSH-Port-Forward-Tool namens mallory abgeschlossen.
Es bietet HTTP-Proxy anstelle von SOCKS-Proxy, die wirklich zu ssh -D
ähnlich ist.
Der Kerncode ist der Antwort von Damick ähnlich.
ssh.Dial
zum entfernten SSH Server mit der Konfiguration und return Client
Client.Dial
verwenden, um weiterleiten alles, was Sie möchten.
Dial initiiert eine Verbindung zur Adresse vom Remote-Host. Die resultierende Verbindung hat eine Null LocalAddr () und RemoteAddr ().
Client.Dial
, um eine Verbindung zum fernen Server herzustellen. Tags und Links go