Múltiplas entradas semelhantes na configuração ssh

166

Digamos que eu queira configurar minhas opções ssh para 30 servidores com a mesma configuração no meu arquivo .ssh config :

host XXX
     HostName XXX.YYY.com
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

em que a única coisa que muda entre essas 30 máquinas é XXX .

Em vez de repetir a estrutura acima 30 vezes no meu arquivo config , existe outra maneira de definir um intervalo de máquinas?

    
por Amelio Vazquez-Reina 17.01.2013 / 19:47

5 respostas

194

Na página ssh_config(5) man:

 Host    Restricts the following declarations (up to the next Host key‐
         word) to be only for those hosts that match one of the patterns
         given after the keyword.  If more than one pattern is provided,
         they should be separated by whitespace.

...

 HostName
         Specifies the real host name to log into.  This can be used to
         specify nicknames or abbreviations for hosts.  If the hostname
         contains the character sequence ‘%h’, then this will be replaced
         with the host name specified on the commandline (this is useful
         for manipulating unqualified names).

Então:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com
    
por 17.01.2013 / 20:51
56

Para minimizar a configuração, você pode ter um .ssh/config como este

Host X01
    HostName X01.YYY.com

Host X02
    HostName X02.YYY.com

...

Host X01 X02 ...
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

Host X01 X02 ... pode ser substituído por Host * se cada host tiver a seguinte configuração

    
por 17.11.2014 / 17:34
42

Basta usar *

Veja 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.?

 A pattern-list is a comma-separated list of patterns.  Patterns within pattern-lists may be negated by preceding them with an
 exclamation mark (‘!’).  For example, to allow a key to be used from anywhere within an organisation except from the “dialup”
 pool, the following entry (in authorized_keys) could be used:

       from="!*.dialup.example.com,*.example.com"
    
por 17.01.2013 / 19:53
8

Das respostas de Ignacio Vazquez-Abrams e H.-Dirk Schmitt, pode-se adicionar o seguinte a .ssh / config

HOST XXX*
    HostName %h.YYY.com
    User myname

e depois, por exemplo, você pode fazer o login como [email protected] por

ssh XXX2
    
por 22.09.2017 / 17:45
7

isso funciona para mim:

CanonicalizeHostname yes
CanonicalDomains xxx.auckland.ac.nz yyy.auckland.ac.nz

host  *.xxx.auckland.ac.nz
   user myuser
host *.yyy.auckland.ac.nz
   user myuser

isso permite usar nomes no domínio e alterar o nome de usuário:

bluebottle:~ user_one$ ssh itslogprd05
[email protected]'s password: 
    
por 31.01.2017 / 01:50

Tags