Ich muss einen ganzen Haufen Hosts über ssh verwalten. Ich kann jedoch nur über einen bestimmten Gateway-SSH-Server darauf zugreifen.
Ich habe folgendes in meinem ~/.ssh/config
:
Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Ich muss mich jedoch mit vielen dieser Maschinen verbinden. Anstatt Dutzende von Einträgen in meine ~/.ssh/config
zu schreiben, kann ich sowieso so etwas haben:
Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Ich weiß, dass Sie %h
in dem Hostname
Argument verwenden können, aber das wäre der Hostname. Was ich wirklich brauche, ist eine Art String-Substitution, wie Bash's ${VAR%thingie}
. Ist das möglich?
Es sieht so aus, als gäbe es keine Möglichkeit, dies zu tun.
quelle
Ich hatte ein ähnliches Problem und schrieb schließlich ein Skript, das die gesamte Boilerplate für mich generierte. Ich ändere ~ / ssh / config nicht mehr, ich ändere ~ / ssh / config.in und führe mein Skript erneut aus.
quelle
.ssh/config.d
für jede Vorlage eine Datei zu haben, in der jede Vorlage im Finale einen oder mehrere Einträge generiert~/.ssh/config
. Es würde auch eine Datei mit universellen Variablen geben, aber jede Vorlage könnte ihre eigenen Variablen haben, die Vorrang vor den oben aufgeführten globalen Variablen haben. Die~/.ssh/config
Datei kann bei Bedarf oder nach einem Zeitplan erstellt werden - das spielt keine Rolle -, solange Sie keine direkten Änderungen daran vorgenommen haben, die Sie beibehalten möchten.Ignorieren Sie die Angabe, den Hostnamen direkt über die
Hostname
Deklaration zu überschreiben, und bestimmen Sie ihn stattdessen zur Laufzeit. Dies geschieht, indem es als Teil der AuswertungProxyCommand
, indem%h
es in dem Befehl referenzieren (auch verwendet%p
anstelle von hartzucodieren Port als 22) , dhMan könnte sogar eine allgemeinere Zeilengruppe haben, wobei Sie jeden Host angeben können, ohne eine
-
so zu behandeln, wie sie ist, oder gemäß einer anderen übereinstimmenden Zeilengruppe, aber einen generischen-
Ansatz, um eine beliebige anzugeben<gateway>-<target>
:Darüber hinaus unterstützen neuere Versionen des SSH-Clients die
[-W host:port]
Option, dieselbe Funktion wienc
(netcat) direkt auszuführen . Als solches können wir das modifizierte verwenden:Wenn Sie eine endliche Liste von Hosts hätten, könnten Sie natürlich immer Folgendes tun:
Hoffe das hilft!
quelle
Ich hatte einen Client mit dem gleichen Setup und habe DSSH verwendet , um mein Problem zu lösen.
Mit DSSH können Sie sich unter anderem über einen Gateway-Host transparent bei Remote-Hosts anmelden.
Anwendungsfälle
quelle