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 2182
wird 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 2182
auf 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
service
um die Verbindung von remote-machine
an 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]