Kann ich SSH verwenden, um eine getunnelte Ressource (HTML-Seite) in einem lokalen Netzwerk bereitzustellen?

437
user3.1415927

Ich habe eine remote gehostete Ressource (Webapp), die ich für den Remote-Zugriff auf einen Server tunneln muss. Ich kann den Befehl zum Weiterleiten des lokalen Ports mit beenden -Lund dann auf die Remote-Ressource localhost:portin meinem Browser zugreifen .

Der Einfachheit halber möchte ich auf den Remote-Host tunneln (SSH mit meinem Schlüssel verwenden), die Website jedoch lokal anzeigen, sodass ich mit verschiedenen Computern in meinem lokalen Netzwerk darauf zugreifen kann.

Zum Beispiel:

Old way: Remote-server --|SSH_Tunnel|-- Local-host:port  New way: Remote-server --|SSH_Tunnel|-- Local-host:port || local-net:port == local_http-traffic == different-local-computer 
0

1 Antwort auf die Frage

1
Kamil Maciorowski

tl; dr? Verwenden ssh -g ….


Ich nehme an, der Befehl, den Sie verwenden, ist wie

ssh -L 1234:server:5678 ssh_server 

Auf lokaler Seite wird auf 127.0.0.1:1234(IPv4) und [::1]:1234(IPv6) überwacht. Lokale Verbindungen zu einer dieser Adressen erreichen Sie server:5678vom ssh_server. Andere Computer in Ihrem LAN können den Tunnel nicht erreichen, weil 127.0.0.1und sie [::1]Loopback-Adressen sind. für jede Maschine bedeuten sie die Maschine selbst.

Um Ihren Tunnel für andere Computer verfügbar zu machen, binden Sie ihn an eine Adresse, die er erreichen kann. Angenommen, es 192.168.0.14handelt sich um eine gültige Adresse des Clients, der ausgeführt wird ssh. binde daran:

ssh -L 192.168.0.14:1234:server:5678 ssh_server 

oder an alle verfügbaren Adressen (wählen Sie einen Befehl):

ssh -L 0.0.0.0:1234:server:5678 ssh_server # IPv4 ssh -L [::]:1234:server:5678 ssh_server # IPv6 ssh -L 0.0.0.0:1234:server:5678 -L [::]:1234:server:5678 ssh_server # IPv4 and IPv6 

Der letztere "offenste" Tunnel kann auch mit erstellt werden -g. Von man 1 ssh:

-g Ermöglicht Remote-Hosts, eine Verbindung zu lokal weitergeleiteten Ports herzustellen.

-gentspricht -o GatewayPorts=yesund GatewayPorts yesEinstellung in ssh_configDatei. Dieser Auszug aus man 5 ssh_configerklärt es noch besser:

GatewayPorts
Gibt an, ob Remote-Hosts eine Verbindung zu lokal weitergeleiteten Ports herstellen dürfen. ssh(1)Bindet standardmäßig lokale Portweiterleitungen an die Loopback-Adresse. Dies verhindert, dass andere Remote-Hosts eine Verbindung zu weitergeleiteten Ports herstellen. GatewayPorts kann verwendet werden, um anzugeben, dass sshlokale Portweiterleitungen an die Platzhalteradresse gebunden werden sollen, sodass Remote-Hosts Verbindungen zu weitergeleiteten Ports herstellen können. Das Argument muss yesoder sein no. Der Standardwert ist no.

So:

ssh -g -L 1234:server:5678 ssh_server 

Anmerkungen:

  • Vergessen Sie nicht, den ausgewählten Port in Ihrer Firewall zu öffnen.
  • Sie können autosshnützlich finden ...
  • … Zusammen mit der ExitOnForwardFailureOption ssh(erklärt in man 5 ssh_config).
  • Im Allgemeinen weist ein HTTP-Server möglicherweise URLs zurück, die er nicht als seine eigenen betrachtet. Sie sagten, localhost:portfunktioniert in Ihrem Browser. Falls URLs wie dieser http://192.168.0.14:1234trotz des Tunnels nicht funktionieren, überprüfen Sie die Serverkonfiguration.

Zusätzliche Ressourcen:

Hervorragende Antwort - leider wurde mein Problem nicht gelöst, da es scheint, als hätte ich Einschränkungen, die ich bei der Frage nicht berücksichtigt habe. Ich markiere Ihre Antwort als die akzeptierte und werde eine neue Frage mit meinen verschiedenen Einschränkungen stellen. user3.1415927 vor 6 Jahren 0