Lokale SSH-Portweiterleitung an eine Website

564
zallik

Ich habe heute mein Gedächtnis beim Aufbau von SSH-Tunneln aufgefrischt und bin auf verschiedene Quellen gestoßen, die das Weiterleiten eines lokalen Ports zu einer Website beschreiben. Zum Beispiel: https://www.techrepublic.com/article/how-to-use-local-and-remote-ssh-port-weiterleitung

„Öffnen Sie ein Terminalfenster auf Ihrem Client und geben Sie den Befehl ein:

ssh -L 8080: www.slashdot.org: 80 localhost

Sie werden aufgefordert, Ihr Benutzerpasswort für den Client-Computer einzugeben. Im Wesentlichen stellen Sie über SSH eine Verbindung zu Ihrem Client-Computer her, erstellen jedoch den erforderlichen SSH-Tunnel zum Ziel. Nachdem Sie sich erfolgreich bei Ihrem lokalen Konto authentifiziert haben, öffnen Sie einen Browser und verweisen Sie auf http: // localhost: 8080 . Ihr Browser sollte Sie automatisch zu Slashdot umleiten. “

Nur, das funktioniert nicht, wenn Sie es tatsächlich versuchen. Ich habe am Ende fehlgeschlagene Verbindungen, 500 Fehler, 404 Fehler usw. Ich habe andere Websites ausprobiert, sogar keine https. Was ist das Problem?

0
Führen Sie einen SSH-Server auf dem Computer aus? Wenn Sie nicht sind, funktioniert das von Ihnen verlinkte Tutorial nicht. Ramhound vor 6 Jahren 0
Jeff hat recht, besonders was die HTTPS-Sache angeht. Ich lief `ssh -L 8080: www.slashdot.org: 443 localhost` und dann funktionierte es. Sie müssen jedoch mit "https: // localhost: 8080" auf die Website zugreifen, nicht mit "http: //". confetti vor 6 Jahren 0

2 Antworten auf die Frage

2
Jeff Aigner

Diese Technik funktioniert, ist aber für den Zugriff auf Websites nicht sehr gut, da Sie für jede Domäne, auf die zugegriffen wird, einen Port weiterleiten müssen. Wenn Sie Slashdot in Chrome laden und die Entwicklertools verwenden, können Sie feststellen, dass beim Laden von Slashdot tatsächlich Inhalt aus mindestens 21 verschiedenen Domänen geladen wird. Wenn Sie nur eine Domain weiterleiten, werden nicht alle Inhalte angezeigt.

Ein weiteres Problem ist, dass Sie auf Port 80 auf einer Website tunneln, die Inhalte auf Port 443 bereitstellt. Wenn Sie "curl -i slashdot.org" ausführen, werden Sie feststellen, dass Sie eine 301-Weiterleitung zu HTTPS erhalten. Wenn der Browser versucht, der Weiterleitung zu HTTPS zu folgen, schlägt alles fehl.

Sie sollten ssh besser als SOCKS-Proxy verwenden und Ihren Browser für die Verwendung konfigurieren. Sie können einen Socks-Proxy auf einem lokalen Port wie folgt öffnen:

ssh -D 8080 myhost.com 

myhost.com könnte in Ihrem Fall "localhost" sein, normalerweise handelt es sich jedoch um einen Remote-Server. Wenn Sie diese Sitzung geöffnet haben, gehen Sie einfach in die Browsereinstellungen und konfigurieren Sie den Browser für die Verwendung eines SOCKS v5-Proxys, der auf den localhost-Port 8080 gerichtet ist (in Firefox einfacher als Chrome imho). Danach führt der Browser den gesamten Datenverkehr durch den SSH-Tunnel.

Dies kann sehr nützlich sein, um auf Websites zuzugreifen, die in privaten Netzwerken gehostet werden, oder um Ihre Daten in einem Netzwerk zu verschlüsseln, das Sie für nicht sicher halten.

Können Sie erklären, warum es sich normalerweise um einen Remote-Server handelt? Ich verstehe es nicht vollständig im Zusammenhang mit der Frage von OP. confetti vor 6 Jahren 0
@confetti Der Zweck der Verwendung von ssh als SOCKS-Proxy besteht darin, Ihren Datenverkehr durch einen entfernten Endpunkt zu tunneln, um Ihren Datenverkehr zu verschleiern oder um Ihren Browser in das Netzwerk Ihres Endpunkts zu bringen. In der ursprünglichen Frage des OP verwendete er lediglich localhost zu Testzwecken. Jeff Aigner vor 6 Jahren 1
Oh ich verstehe, das ist ziemlich cool. Ich wusste nie, dass die Einrichtung eines SOCKS-Proxys so einfach ist. Wenn ich OP richtig verstanden habe, obwohl er eine bestimmte Site an Port 8080 zu seinem localhost (und möglicherweise zu LAN-IP?) Routen möchte, sehe ich nicht ganz genau, wie das mit diesem Ansatz funktionieren würde. Andererseits bin ich mir nicht sicher, was das ultimative Ziel von OP überhaupt ist. confetti vor 6 Jahren 0
1
confetti

Jeff hat absolut recht, aber ich möchte eine Lösung mit lokaler Portweiterleitung hinzufügen:

Da die Website, auf die Sie zugreifen möchten, HTTPS verwendet, benötigen Sie den Zugriff auf dessen Port 443.

$ ssh -L 8080:www.slashdot.org:443 localhost 

Zusätzlich zu diesem, müssen Sie verwenden https://im Browser statt http://, so würden Sie die folgende URL in Ihrem Browser zugreifen: https://localhost:8080. Bei Firefox wurde dies mit einer Warnung "Unsichere Verbindung" angezeigt, da das für die Website, auf die Sie zugreifen möchten, ausgegebene SSL-Zertifikat nicht signiert wurde, um mit localhost verwendet zu werden. Sie können diese Warnung jedoch ignorieren und fortfahren.