Je dois administrer toute une pile d'hôtes sur ssh. Cependant, je ne peux y accéder que via un certain serveur ssh de passerelle.
J'ai les éléments suivants dans mon ~/.ssh/config
:
Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Cependant, je dois me connecter à beaucoup de ces machines. Au lieu de mettre des dizaines d'entrées dans mon ~/.ssh/config
, est-ce que je peux de toute façon avoir quelque chose comme ça:
Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Je sais que vous pouvez utiliser %h
dans l' Hostname
argument, mais ce serait le nom d'hôte. Ce dont j'ai vraiment besoin, c'est d'une sorte de substitution de chaîne, comme celle de bash ${VAR%thingie}
. Est-ce possible?
Il semble qu'il n'y ait aucun moyen de le faire.
la source
J'ai eu un problème similaire et j'ai fini par écrire un script qui a généré tout le passe-partout pour moi. Je ne change plus ~ / ssh / config, je change ~ / ssh / config.in et relance mon script.
la source
.ssh/config.d
un fichier pour chaque modèle, où chaque modèle générerait une ou plusieurs entrées dans la finale~/.ssh/config
. Il y aurait également un fichier avec des variables universelles, mais chaque modèle pourrait avoir ses propres variables qui auraient priorité sur les globales, répertoriées en haut. Le~/.ssh/config
fichier peut être généré à la demande ou selon un calendrier - cela n'a pas d'importance - tant que vous ne lui apportez jamais de modifications directes que vous souhaitez conserver.Ignorez la spécification de la substitution du nom d'hôte directement via la
Hostname
déclaration et déterminez-le à la place lors de l'exécution. Pour ce faire, évaluez-le dans le cadre deProxyCommand
, utilisez%h
pour le référencer dans la commande (utilisez également%p
au lieu du port de codage en dur comme 22), c'est-à-direOn pourrait même avoir une strophe plus générique, par laquelle vous pouvez spécifier n'importe quel hôte sans
-
juste être traité tel quel , ou selon une autre strophe correspondante, mais avoir une-
approche générique pour spécifier n'importe quelle<gateway>-<target>
:De plus, les versions plus récentes du client SSH prennent en charge l'
[-W host:port]
option permettant d'exécuter directement la même fonction quenc
(netcat). En tant que tel, nous pouvons utiliser le modifié:Bien sûr, si vous aviez une liste finie d'hôtes, vous pourriez toujours faire:
J'espère que cela t'aides!
la source
J'avais un client avec la même configuration et j'ai utilisé DSSH pour résoudre mon problème.
DSSH vous permet entre autres de vous connecter de manière transparente à des hôtes distants via un hôte de passerelle.
Cas d'utilisation
la source