Multihop-Tunnel mit PuTTY

Multihop-Tunnel mit PuTTY

Wie konfiguriere ich Putty für eine 3-Hop-SSH-Tunnelverbindung? Ich weiß, wie man Putty für eine 2-Hop-SSH-Tunnelverbindung konfiguriert, aber jetzt suche ich nach einer Möglichkeit, es mit 3 Hops zu konfigurieren. Kann mir jemand erklären, wie wir das erreichen können?

Für zwei Hops folge ich der folgenden Methode.

Windows 10 (Putty) --> Linux-Rechner1 (192.168.1.100) --> Linux-Rechner2 (192.168.1.150)

  • Im Sitzungsfenster werden die Zieladresse (192.168.1.150) und der Port 22 angegeben.
  • In der Proxy-Option habe ich die IP des Zwischenservers (192.168.1.100) und den Port 22 angegeben.
  • Auch für den Telnet-Befehl habe ich Folgendes angegeben.

plink -agent -l %Benutzer %Proxyhost -nc %Host:%Port

Das obige Setup funktioniert für 2 Hops einwandfrei. Aber jetzt benötige ich einen 3-Hop-SSH-Tunnel. Wie ändere ich den aktuellen und füge 1 weiteren Hop hinzu?

Antwort1

Es ist nicht klar, ob Sie lediglich eine Verbindung zu einem zusätzlichen Computer im selben Netzwerk wie die Linux-Computer 1/2 herstellen möchten oder ob Sie zu einem anderen Netzwerk dahinter springen müssen (z. B. Computer 4 auf 172.22.1.x).

Wenn Sie einfach versuchen, auf eine andere Maschine im selben 192.168.1.x Netzwerk wie Linux Maschine 1/2 zuzugreifen, verwenden Sie einen tatsächlichenSSH-Tunnel(zu finden im Menü von Putty Connection -> SSH -> Tunnels). Sie können mehrere Tunnel zu so vielen Maschinen einrichten, wie Sie benötigen.

Wenn Sie tatsächlich versuchen, auf ein drittes Netzwerk zuzugreifen, können Sie eine weitere Putty-Instanz öffnen, die die Verbindung über einen Tunnel herstellt, der auf Ihrer ursprünglichen Putty-Instanz definiert ist.

  • Definieren Sie einen Tunnel in Putty, der einen Port auf Ihrem lokalen Computer (z. B. 2222) an Port 22 auf Linux Machine2 weiterleitet
  • Öffnen Sie dann eine weitere Putty-Instanz auf Ihrem Windows-Computer, die den Tunnel verwendet (d. h. eine Verbindung zu Localhost:2222 herstellt) UND einen neuen Tunnel definiert, um einen zusätzlichen Port (z. B. 2223) an Port 22 auf Computer4 (Ihren 3. Hop) weiterzuleiten.
  • Öffnen Sie eine weitere Instanz von Putty und stellen Sie eine Verbindung zu Localhost:2223 her, um auf Machine4 zuzugreifen

Ich habe das bisher nur mit 2 Hops gemacht, also weiß ich nicht, wie es funktionieren wird. Es ist keine ideale Lösung, aber es könnte funktionieren, wenn dies Ihre einzige Option ist.

Bearbeiten: Wenn Sie nicht auf Windows/Putty beschränkt sind,dies (Transparentes Multi-Hop-SSH)kann tun, was Sie wollen. Wenn Sie auf Windows beschränkt sind,Cygwinverfügt möglicherweise über flexiblere SSH-Tools.

Antwort2

Multihop-Tunnel mit PuTTY

PuTTY -> jHost1 (jIP1) -> jHost2 (jIP2) -> Ziel (dIP)

Schnelle Antwort:

Ihr Ansatz ist richtig, verwenden Sie einfach plink zu jHost1 als lokalen Proxy für plink zu jHost2:

plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"

Weitere Erläuterungen und Vorbehalte:

  1. Verwenden Sie -t(in beiden Plinks), damit IhreTerminalsignalefunktionieren (da Sie keine Remote-Shell auf den Jump-Hosts aufrufen)

  2. Es gibtPasswörter im Klartext(in der Befehlszeile/PuTTY-Konfiguration), wann -l user -pw passwordverwendet wird (spielt keine Rolle, wenn Sie den PuTTY-Platzhalter %proxypass verwenden).

    • verwenden Sie dies -i, um einen privaten Schlüssel ohne Passphrase anzugeben (da PuTTY die Standard-E/A verwendet und Sie diese nicht eingeben können)
    • oder verwenden Sie -agent, um Schlüssel von Pageant zu verwenden
    • Agent-Weiterleitung ( -a) ist nicht erforderlich, da die Plinks lokal ausgeführt werden.
  3. Führen Sie die Plinks zum ersten Mal von der Kommandozeile aus aus, um zu sehen, ob keine weiteren Fragen auftreten. Normalerweise erhalten Sie eine "Eingehendes Paket wurde bei der Entschlüsselung verstümmelt"-Fehler, wenn plink Sie auffordert, den SSH-Schlüssel von jHost zu importieren.

  4. Beachten Sie die Verwendung von jHostund jIP. Damit jHostmeine ich dielogischer Hostnamefür die Schlüsselsuche „known_hosts“ von plink (PuTTY-Speicher in der Windows-Registrierung). jIPist der Name/die IP des nächsten Hops, auf den/die vom aktuellen Hop aus zugegriffen werden kann. (Sie stellen normalerweise eine Verbindung von einem anderen Netzwerk her, das nicht in der Lage ist, zu antworten jHost.)

    • Der äußere Plink kann einfach verwendet werden jHost2, da die Verbindung über einen Proxy erfolgt und überhaupt keine DNS-Suche stattfindet.
    • Der innere Plink muss dies jIP1zur Verbindung, -loghost jHost1zur lokalen Schlüsselsuche und -nc jIP2:jPort2zu NetCat zum nächsten Hop verwenden.
  5. Wenn Sie verwenden müssenTCP-Weiterleitungauf dem Ziel (das zugelassen werden muss), müssen Sie es nur in PuTTY so konfigurieren, als ob es überhaupt keine Jump-Hosts gäbe. Dies liegt daran, dass die SSH-Verbindung zum Ziel über jHost2 und diese Verbindung wiederum über jHost1 getunnelt wird und die Jump-Hosts keinen Einblick in den Tunnel haben.

    • Im Gegensatz dazu, einfach per SSH zum Jump-Host zu wechseln und SSH erneut auszuführen, um das Ziel zu erreichen, wobei Sie <enter>~C<enter>eine Sequenz verwenden müssen, um zum SSH-Client des Jump-Hosts zu wechseln und -L/ -R-Befehle verwenden müssen, um Tunnel dynamisch hinzuzufügen.

Keine TCP-Weiterleitung

plink -nc( ssh -Wentspricht) ist ein lokaler Proxy, der seine Standard-E/A über einen Jump-Host TCP-weiterleitet. Wenn Sie TCP-Weiterleitung auf den Jump-Hosts nicht zulassen können, können Sie als begrenzte Problemumgehung SSH verwenden jHost1und ssh user2@jHost2 -t ssh user@Destination„Verbindung -> SSH -> Remote-Befehl“ ohne Proxy-Einstellungen verwenden.

Auf diese Weise starten Sie einen neuen SSH-Client auf dem Jump-Host (und die Schlüssel müssen vorhanden sein / Passwörter erneut eingegeben / Agent weitergeleitet, Konfiguration / bekannte Hosts dupliziert ...).

verwandte Informationen