Netcat / Named Pipe-Proxy über SSH

Netcat / Named Pipe-Proxy über SSH

Ich bin es gewohnt, einen Remote-Service-Port auf dem lokalen Host mithilfe von SSH wie folgt weiterzuleiten:

ssh -L 2181:localhost:2182 user@server (leite Remote-Host-Port 2182 an lokalen Port 2181 weiter)

jetzt versuche ich von der Maschine, mit der ich per SSH verbunden bin, einen TCP-Dienst zu erreichen und die Antwort an meine lokale Maschine weiterzuleiten:

local-machine:2181 <-- SSH --> remote-machine:2182 <-- netcat/named pipe --> service:2181

Hinweis: Ich habe keinen direkten Zugriff auf die Servicemaschine. Ich habe nur über die Maschine, mit der ich per SSH verbunden bin, Zugriff auf das Netzwerk.

Ich habe versucht, Netcat mit einer benannten Pipe zu verwenden:

Auf dem Remote-Computer:

mkfifo fifo
nc -k -l 2182 <fifo | nc service 2181 >fifo

Auf dem lokalen Computer: echo message | nc localhost 2181

aber das scheint nicht zu funktionieren.

Ich habe auch versucht, auf Remote-Maschine nc -k -l 2182 0<fifo | nc service 2181 1>fifo

ohne Glück

Auf dem Remote-Rechner nc -k -l 2182wird die Meldung ausgegeben, die ich vom lokalen Rechner sende:2181

Wenn ich das einfach so weiterleite: nc -k -l 2182 | nc service 2181 sehe ich die Antwort vom Dienst auf dem Remote-Rechner. Ich kann also den ganzen Weg zum Dienst und zurück zum Remote-Rechner gehen, aber dort endet es:

local-machine:2181 <-/- SSH --> remote-machine:2182 <-- netcat --> service:2181

daher verstehe ich nicht, warum die benannte Pipe die Antwort nicht über die SSH-Verbindung zurück an meinen lokalen Computer weiterleitet.

echo message | nc localhost 2182auf dem Remote-Computer gibt NICHTS an den lokalen Computer zurück und schafft es daher aus irgendeinem Grund nicht über SSH.

Irgendeine Idee, warum das so ist und wie man es beheben kann?

Danke für die Hilfe.

(BEARBEITET zur besseren Übersicht) Hinweis: Ich brauche das, weil ich nur per SSH auf eine Maschine zugreifen kann, die Teil eines Clusters ist, und diese Maschine Zugriff auf die Dienste hat. Ich möchte den Dienst nicht nach außen hin offenlegen und auch nicht in jedem Dienstcontainer eine SSHD haben.

Antwort1

Ich wurde darauf hingewiesen, dass man einfach

ssh -L 2181:service:2181 user@remote-machine

serviceum die Verbindung von remote-machinean den Port auf weiterzuleiten local-machine.

einfach und effizient.

Antwort2

Sie können zu diesem Zweck -R verwenden:

ssh -R 8080:127.0.0.1:7070 yourhost

Dadurch wird ein Port auf yourhost:7070 geöffnet, der an localhost:8080 weiterleitet.

In der Dokumentation heißt es

[-R [bind_address:]port:host:hostport]

verwandte Informationen