So weisen Sie dem SSH-Tunnel einen Hostnamen zu

15

Ich verwende ssh [email protected] -g -L 4321:localhost:28017 , um einen Tunnel von meinem MacBook zu meinem dedizierten Server bei meinem Hosting-Anbieter herzustellen. Es funktioniert gut. Jetzt möchte ich auf mehrere Admin-Sites auf dem Remote-Server zugreifen (eine MongoDB-Statusseite, eine RabbitMQ-Seite usw., alle auf verschiedenen Ports). Alle von ihnen sind an 127.0.0.1 auf dem Remotecomputer gebunden. Wie kann ich diesen ssh-Befehl anpassen?

  • Weisen Sie dem Tunnel einen Namen zu und verwenden Sie zB "my.tunnel.name" in meinem Browser
  • in der Lage zu sein, den Remote-Port in meinem Browser zu definieren; Ich möchte eine Verbindung zu my.tunnel.name:port herstellen, um die verschiedenen Sites aufrufen zu können

Ist das mit ssh möglich? Ich habe die Manpages gelesen und seit zwei Tagen gegoogelt, aber es scheint nicht zu funktionieren.

--edit 2012-06-01 23: 36-- Dank der bereitgestellten Antworten und Kommentare funktioniert die Portweiterleitung jetzt mit

ssh [email protected] -D 4321

Ich kann dies in meinem Browser als Proxy einrichten und der Browser behandelt alle Anfragen an localhost: anyport so, als ob sie auf dem Remote-Server gestellt worden wären. Die Verwendung eines Namens ist jetzt nicht mehr erforderlich, da der Browser nur für Remoteserver-Sites vorgesehen ist.

brain_at_work
quelle

Antworten:

12

Was Sie beschreiben, ist nicht möglich. Aber es gibt immer noch gute Neuigkeiten:

Es ist jedoch möglich, eine dynamische Verbindung zum SSH-Server herzustellen. Dadurch wird ein Port auf Ihrem lokalen Computer geöffnet, auf den Sie die Proxy-Einstellung Ihres Browsers verweisen und den Sie als Proxyserver verwenden können. Sie müssen jedoch einen Hostnamen / eine IP-Adresse und einen Port in den Browser eingeben, als ob der Browser auf dem Computer ausgeführt würde, auf dem sich der SSH-Server befindet.

Der Befehl sieht folgendermaßen aus: ssh [email protected] -D 1234
Zeigen Sie dann auf den Proxy Ihres Browsers localhost:1234.

Wenn Sie also auf Server A tunneln und eine Verbindung zu Server B herstellen möchten, geben Sie in Ihren Browser die Adresse ein, die Sie für einen auf Server A ausgeführten Browser eingeben würden Prozess auf Server B hört nur auf 127.0.0.1), dann konnte noch keine Verbindung hergestellt werden. Es hört sich so an, als hättest du nur einen Server, aber ich wollte sichergehen, dass dies klar ist.

Wenn Sie nur einen Server haben, tunneln Sie mit der dynamischen Verbindung hinein und stellen Ihren Proxy ein. Sie können dann (zum Beispiel) "localhost: 1234" in den Browser eingeben und es wird eine Verbindung zu dem Dienst hergestellt, der auf dem Remote-Server an Port 1234 ausgeführt wird.

Securit-Seite Hinweis: Richten Sie niemals niemals einen Server ein, auf dem root SSH ausführen kann! Schwere Sicherheitslücke. Erstellen Sie ein normales Benutzerkonto (wer darf su oder sudo) und SSH als dieser Benutzer.

Chris S
quelle
2
Sie verwenden -L 1234 (lokale Portweiterleitung), wenn Sie -D 1234 (dynamische Portweiterleitung) verwenden sollten. Und vielleicht sollten Sie auch -g vermeiden. -G bedeutet, dass Remotehosts eine Verbindung zu Ihrer Weiterleitung herstellen können. Dies ist nicht das, was Sie möchten, wenn Sie dies von Ihrer Workstation aus tun.
Mattias Ahnberg
Danke, Chris. Das habe ich schon versucht. Ich kann den Befehl ssh nicht nur mit einem angegebenen Port verwenden. Es wird ein Fehler zurückgegeben: "
Falsche
@ matthias-ahnberg: Toll, das hat den Trick gemacht. Mit der dynamischen Weiterleitung kann ich jetzt den Port als Proxy und Localhost verwenden: Someport-Anrufe werden an den Remote-Server geleitet.
brains_at_work
@MattiasAhnberg Wow, was für ein Brainfart. Danke für die Verbesserung.
Chris S
Ich folgte diesem Prozess, bekam aber den Fehler "Die Verbindung wurde zurückgesetzt" in Firefox.
Rivu
23

Sie können einen Namen vergeben, indem Sie die Tatsache verwenden, dass Ihr Loopback-Adapter grundsätzlich auf jede Adresse im 127.0.0.0/8-Netzwerk reagiert.

Anstatt also an Port 4321 zu binden, könnten Sie an 127.1.2.3:4321 binden. Richten Sie dann einfach einen Host-Eintrag ein, der der Loopback-Adresse, der Sie so zugeordnet sind, einen Namen zuordnet 127.1.2.3.

In meiner SSH-Konfiguration auf meiner Admin-Workstation sind viele Tunnel so konfiguriert, dass sie an eine Adresse im Loopback-Bereich gebunden sind, und ich habe Einträge in meiner Host-Datei, sodass ich viele Tunnel parallel über denselben Port öffne und zwischen ihnen über unterscheide Name.

Also, wenn Sie so verbinden

ssh [email protected] -g -L 127.1.2.3:4321:localhost:28017

Und Ihre hosts-Datei hat eine Zeile wie diese.

127.1.2.3 my.tunnel.name

Dann sollten Sie in der Lage sein, von Ihrem lokalen Computer aus eine Verbindung zu my.tunnel.name:4321 herzustellen.

Wenn Sie zusätzlichen IP-Adressraum im Netzwerk haben, mit dem Ihr SSH-Client verbunden ist, können Sie Ihrer Ethernet-Schnittstelle sogar eine sekundäre Adresse zuweisen und eine Ihrer realen IPs verwenden. Richten Sie dann Einträge in Ihrem DNS ein, wenn andere Systeme dies können sollen Verwenden Sie Ihren SSH-Tunnel.

Mit der Option -L -L [bind_address:]port:host:hostportkönnen Sie eine gültige IP-Adresse auf dem lokalen System zum Binden verwenden. Sie müssen die -gOption auch einschließen, wenn andere Hosts eine Verbindung über Ihren SSH-Tunnel herstellen sollen.

Zoredache
quelle
Ich musste die IPs zu meinem Loopback in OSX hinzufügen. ifconfig l0 alias 127.0.1.1 255.255.255.0ansonsten toller tipp!
Devians
1
Wenn Sie nicht möchten, dass eine Shell erstellt wird, führen Sie sie -Nam Ende des Befehls aus. Auf diese Weise ist es einfacher, sich daran zu erinnern, dass es sich um einen Tunnel handelt, nicht nur um eine SSH-Verbindung.
mlissner
Bei der Verwendung 127.1.2.3musste ich dies auf meinem MacBook tun:, ifconfig lo0 alias 127.1.2.3 255.255.255.0das 127.1.2.3als neue Adresse auf der Benutzeroberfläche hinzufügt lo0.
Donn Lee
5

Erstellen Sie mit Ihrem SSH-Tunnel eine dynamische Portweiterleitung auf Anwendungsebene (im Grunde genommen Socks-Proxy), und leiten Sie Ihre Anwendungen über diesen Tunnel. Gehen Sie wie folgt vor, um einen dynamischen Tunnel zu erstellen:

ssh [email protected] -D 127.0.0.1:31337

Konfigurieren Sie dann Ihre Anwendung, um diese als SOCKSv5-Proxy zu verwenden.

Wenn Sie möchten, dass ein Hostname an diesen gebunden ist, fügen Sie einfach /etc/hostsEinträge hinzu, die auf 127.0.0.1 verweisen. Besser ist es jedoch, 127.0.0.2 für den ersten Tunnel und einen Hosteintrag für diesen einen, 127.0.0.3 für den zweiten Tunnel hinzuzufügen tunnel und ein separater Hosteintrag für diesen usw. Wenn Sie Aliase für 127.0.0.1 hinzufügen, wird dieser Alias ​​manchmal in anderen Befehlssuchen von localhost angezeigt, was verwirrend sein kann!

Um dies in einem Webbrowser reibungslos zu verwenden, können Sie ein Proxy-Addon verwenden. Als Beispiel bevorzuge ich den Chrome-Webbrowser und für dieses verwende ich ein Addon namens Proxy Switchy!. Sie können es hier herunterladen:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

In der Konfiguration dieses Addons kann ich mehrere separate Proxys definieren und dann reguläre Ausdrücke von Hosts / URLs an die Verwendung bestimmter Proxys binden. Auf diese Weise werde ich immer ordnungsgemäß durch die richtigen Tunnel umgeleitet, ohne manuell wechseln zu müssen. Bitte lassen Sie mich wissen, wenn Sie weitere Erläuterungen zu einem der Schritte benötigen!

Mattias Ahnberg
quelle
Vielen Dank für den Add-On-Tipp. Da ich auch Chrome verwende, muss ich FireFox auch nicht offen halten.
brains_at_work