Più voci simili nella configurazione ssh


193

Supponiamo di voler configurare le mie sshopzioni per 30 server con la stessa configurazione nel mio .ssh configfile:

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

dove l'unica cosa che cambia tra queste 30 macchine è XXX.

Invece di ripetere la struttura sopra 30 volte nel mio configfile, esiste un altro modo per definire un intervallo di macchine?

Risposte:


232

Dalla ssh_config(5)pagina 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).

Così:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com

9
Sembra che la %hfunzione sia apparsa nella versione 5.6 di OpenSSH . Mi chiedevo perché non l'avessi mai visto prima - la versione in Debian Squeeze è la 5.5.
jw013,

2
Se utilizzi un vecchio sistema operativo o hai bisogno di regole in cui non sono supportate config, puoi sempre scrivere un semplice script che genera il tuo config.
Roger Dahl,

69

Per ridurre al minimo l'installazione è possibile avere .ssh/configquesto come questo

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 ...potrebbe essere sostituito da Host *se ogni host ha la seguente configurazione


2
Questa sembra essere l'unica risposta che aiuta effettivamente l'OP (e me stesso).
Fisico pazzo,

Qual è l'ordine prioritario? È solo roba definita più avanti nel file sostituisce roba definita precedentemente nel file? Come dire che avevo "Compression no" sotto "Host X01", che sarebbe stato sostituito da "Compression yes" in "Host X01 X02"?
Ben Farmer,

1
Dal manuale ssh_config: poiché viene utilizzato il primo valore ottenuto per ciascun parametro, dovrebbero essere fornite dichiarazioni più specifiche per l'host vicino all'inizio del file e impostazioni predefinite generali alla fine.
Guillaume Vincent

Può Host X01 X02 ...essere sostituito da *.YYY.com? Sembra un po 'più gestibile se funziona.
Michael,

51

Basta usare *

Vedi man ssh_config:

MOTIVI Un modello è composto da zero o più caratteri non bianchi, '*' (un carattere jolly che corrisponde a zero o più caratteri) o '?' (un carattere jolly che corrisponde esattamente a un carattere). Ad esempio, per specificare un set di dichiarazioni per qualsiasi host nel set di domini ".it", è possibile utilizzare il modello seguente:

       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"

Grazie! Sembra essere quello di cui ho bisogno, ma ancora non capisco come adattarlo al mio caso. Uso un punto interrogativo ?dove voglio che sia sostituito dal modello corrispondente al *segno?
Amelio Vazquez-Reina,

2
Hmm. Penso che i modelli abbiano uno scopo diverso da quello di cui ho bisogno. Reindirizzano più query alla stessa configvoce, ma i parametri dell'host sono fissi (vale a dire che i pattern non possono essere utilizzati per modellare i parametri). Ho sbagliato?
Amelio Vazquez-Reina,

4
@ user27915816 Sì, hai ragione, non c'è modo di fare "template" per quanto ne so. Il meglio che puoi fare è separare le linee costanti in una singola Host *voce e avere una voce separata per ciascuna Host XXXche consiste solo delle parti che variano (cioè la Hostname XXX.YYY.ZZZlinea).
jw013,

Questa pagina è il miglior risultato (per ora) quando google "caratteri jolly di configurazione SSH", quindi grazie per aver fornito una risposta che risolva tale domanda.
vastlysuperiorman,

9

Dalle risposte di Ignacio Vazquez-Abrams e H.-Dirk Schmitt, si può aggiungere quanto segue a .ssh / config

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

e quindi, ad esempio, è possibile accedere come myname@XXX2.YYY.com da

ssh XXX2

poiché XXX * implica già XXX.YYY.com, HostName dovrebbe essere solo %h, non%h.YYY.com
biocyberman

8

questo funziona per me:

CanonicalizeHostname sì
CanonicalDomains xxx.auckland.ac.nz yyy.auckland.ac.nz

host * .xxx.auckland.ac.nz
   utente mioutente
host * .yyy.auckland.ac.nz
   utente mioutente

ciò consente di utilizzare nomi all'interno del dominio e di modificare il nome utente:

bluebottle: ~ user_one $ ssh itslogprd05
password myuser@itslogprd05.xxx.auckland.ac.nz: 

Questa è la risposta migliore per me. Mi sono sbarazzato dello script che usavo per generare la mia configurazione!
Jooks

Cosa succede se itslogprd05esiste un host in entrambi i domini? xxx.auckland.ac.nzvince, immagino?
Levente Huszko
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.