
Ich arbeite an einer Server-App, die auf einem Remote-Ubuntu-14.x-Server läuft. Diese App lauscht auf Port 8000 auf der Remote-Box. Ich habe eine richtige SSH-Sitzung, sodass ich in die Box getunnelt bin, und ich verfüge auch über Sudo-Fähigkeiten.
Ich habe IntelliJ auf meinem lokalen Linux-System in meinem Büro und es läuft ebenfalls unter Ubuntu 14.x. Ich muss es mit Port 8000 auf der Remote-Box verbinden, um eine IntelliJ-Remote-Debugging-Sitzung durchführen zu können. Port 8080 auf der Remote-Box ist nicht öffentlich verfügbar.
Gibt es ein Dienstprogramm, einen IP-Tabellentrick (auf der Remote-Box) oder einen SSH-Trick usw., der einen lokalen Port auf meinem System bereitstellen kann, mit dem sich IntelliJ verbinden kann, und dann den Verkehr von und zu diesem Port über den SSH-Tunnel an Port 8000 auf dem Remote-System weiterleitet? Mit anderen Worten: IntelliJ auf meiner lokalen Box denkt dann, es würde direkt mit der Server-App auf der Remote-Box kommunizieren, während die Verbindung zwischen ihnen in Wirklichkeit über den aktiven SSH-Tunnel läuft?
Ich erinnere mich, dass ich so etwas vor langer Zeit schon einmal gemacht habe, aber ich habe völlig vergessen, wie das geht. Damals war der Remote-Client eine Windows-Box, also war die Lösung für Windows-Systeme gedacht. Dieses Mal sind sowohl das lokale System als auch das Remote-System Ubuntu 14.x-Server.
Antwort1
Richten Sie einen Forward-Tunnel auf dem lokalen Computer ein.
autossh -f -N -L 0.0.0.0:8000:localhost:8000 username@remotebox
0.0.0.0:8000
ist das, womit sich IntelliJ verbindet. Es geht davon aus, dass die Web-App auf der lokalen Maschine läuft, an jede lokale Schnittstelle gebunden ist und auf Port 8000 ausgeführt wird.
localhost:8000
ist der Punkt, mit dem der Tunnel im Kontext der Remotebox verbunden wird. localhost
ist nicht mehr der Punkt, localhost
an dem Sie arbeiten, sondern die localhost
Schnittstelle innerhalb der Remotebox-Maschine. Dort wird er aus dem Kontext des Benutzers mit Port 8000 verbunden, was effektiv Ihre Webanwendung ist username
.
autossh
ist ein Wrapper, ssh
der sich bei einem Verbindungsabbruch automatisch um die Wiederherstellung der Verbindung kümmert.
Wenn Sie auf der Remotebox einen nicht standardmäßigen Port für SSH verwenden, verwenden Sie den -P <PORT>
Parameter, um eine Verbindung damit herzustellen.
Wenn das oben Gesagte nicht das gewünschte Ergebnis bringt, ist diese Antwort einen Blick wert:https://unix.stackexchange.com/a/118650/61956
von dort aus habe ich Ihnen gerade das erste Diagramm erklärt. Ich habe dem lokalen Port die Schnittstelle vorangestellt. 0.0.0.0
Ich denke, es ist standardmäßig so, localhost
wenn Sie es weglassen, was Sie tun können, wenn Sie möchten. Es könnte sicherer sein, den 0.0.0.0:
Teil zu entfernen, denn wenn dies localhost
der Standard ist, kann niemand in Ihrem Netzwerk Ihren Computer verwenden, um diesen SSH-Tunnel zu verwenden. Andernfalls wäre für sie 192.168.10.10:8000
ein Einstiegspunkt zur Remote-Webanwendung, wenn 192.168.10.10
dies die IP des Computers ist, an dem Sie arbeiten.