disons que mon ~/.ssh/config
a une ligne:
Host machine1
User user
HostName machine1
ProxyCommand ssh server nc %h %p 2> /dev/null
et cela fonctionne correctement, mais le problème est que j'ai beaucoup de machines
: machine1, machine2, machine3, ...
alors comment puis-je les définir toutes sans copier manuellement le même type de lignes
Vous pouvez le faire de cette façon:
Host machine1 machine2 machine3
User user
ProxyCommand ssh server nc %h %p 2>/dev/null
Il vous suffit de répertorier les hôtes dans la ligne Host
, séparés par des espaces, et vous pouvez omettre HostName
si ce n'est pas différent du nom que vous avez donné dans la ligne Host
. Voir Plusieurs entrées similaires dans ssh config · U & L .
Pour simplifier encore plus, il existe les caractères génériques *
et ?
disponibles avec leur signification habituelle, de sorte que Host machine?
soit également possible pour votre exemple.
Si vos noms d'hôtes correspondent à un modèle, vous pouvez utiliser les modèles de SSH:
Vous pouvez utiliser des modèles dans _~/.ssh/config
_. De man ssh_config
:
_PATTERNS
A pattern consists of zero or more non-whitespace characters, ‘*’ (a
wildcard that matches zero or more characters), or ‘?’ (a wildcard that
matches exactly one character). For example, to specify a set of
declarations for any Host in the “.co.uk” set of domains, the following
pattern could be used:
Host *.co.uk
The following pattern would match any Host in the 192.168.0.[0-9] network
range:
Host 192.168.0.?
_
Donc, si vous voulez utiliser un proxy complet dans _*.example.com
_, alors dans votre _~/.ssh/config
_, mettez:
_Host *.example.com
User user
ProxyCommand ssh server nc %h %p 2> /dev/null
_
Ou, en utilisant les options de ssh
, vous pouvez éviter netcat:
_Host *.example.com
User user
ProxyCommand ssh -qW %h:%p server
_
De man ssh
:
_-W Host:port
Requests that standard input and output on the client be
forwarded to Host on port over the secure channel. Implies -N,
-T, ExitOnForwardFailure and ClearAllForwardings.
_