Übergeben von Parametern an die Remote-SSH-Portweiterleitung

Übergeben von Parametern an die Remote-SSH-Portweiterleitung

Ich habe einen Remote-Server, der sich hinter zwei Gateways befindet, wie in der Abbildung dargestellt. gw1ist für die Außenwelt offen, während gw2nur von aus zugänglich ist gw1. Serverist nur von aus zugänglich gw2und kann einer von mehreren möglichen Servern sein. Ich möchte die Portweiterleitung sshso konfigurieren, dass von meinem Client-Rechner automatisch an auf 443weitergeleitet wird . Das ist nicht das Problem. Ich habe:2000gw1

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

Und das funktioniert perfekt. Jetzt möchte ich, 2000dass von weitergeleitet gw1wird an , wenn ich an . Ich kann Folgendes tun:443Servergw2sshgw2

HostName gw2
LocalForward 2000 Server:443

Gibt es eine Möglichkeit, die IP des Servers als Parameter zu übergeben, da sie jedes Mal anders sein kann?

Netzwerkeinrichtung

Antwort1

Angenommen, Port 2000 ist Ihnen egal. Ihr Ziel ist eigentlich nur, Port 443 vom Client zum Server weiterzuleiten. Und angenommen, Sie haben die Hosts Server1, Server2, Server3, ... in der Rolle des Servers. Wenn Sie dies zu Ihrer .ssh/config hinzufügen:

Match host server*
ProxyCommand ssh gw1 nc gw2 22
LocalForward 443 %h:443

Dann wird beispielsweise ssh server1über gw1 eine Verbindung zu gw2 hergestellt und von dort 443 an Server1 weitergeleitet.

Was dies bewirkt: Das ProxyCommandweist ssh an, sich zuerst mit gw1 zu verbinden und die Standardausgabe an weiterzuleiten nc gw2 22, das den Datenstrom an gw2 auf Port 22 weiterleitet. Dadurch wird ein Tunnel für die Standardeingabe auf dem Client über gw1 zu gw2:22 erstellt. ssh öffnet dann eine zweite SSH-Sitzung durch diesen Tunnel zu gw2. Sobald dies eingerichtet ist, LocalForwardleitet das Port 443 an Server1 weiter ( %hdas ist der Hostname, den Sie in der Befehlszeile angegeben haben).

Weitere Informationen zu Match und ProxyCommand finden Sie unter man ssh_config.

Beachten Sie, dass der Befehl zwar lautet ssh server1, aber tatsächlich nur SSH bis zu gw2 verbindet und dann von dort Port 443 weiterleitet. Eine Shell würde auf gw2 geöffnet, nicht auf Server1. Sie sollten also ssh -N server1stattdessen ausführen, um das Öffnen der Shell zu vermeiden, da das Ziel eigentlich nur darin besteht, den Port weiterzuleiten. Leider gibt es kein Äquivalent zu -N in .ssh/config, aber Sie könnten etwas wie hinzufügen, LocalCommand waitum dasselbe zu erreichen – die Shell würde einfach warten, bis sie unterbrochen wird, und es würde keine Shell-Eingabeaufforderung geben.

verwandte Informationen