2016-07-05 1 views
1

Mes exigences sont les suivantesSSH configuration du fichier de configuration avec des jokers et DRY

  1. Toutes nos machines de cloud computing ont besoin de la même config (User, Port, IdentityFile)
  2. je besoin de ces paramètres à leur appliquer basé sur le domaine (* .xyz.com)
  3. Je dois aussi ces paramètres à appliquer quand je configuration courte hôtes (Voir ci-dessous)

Ma configuration actuelle SSH est un

Host shortname1? 
    Hostname %h.prod.xyz.com 

Host test-myname 
    Hostname combo.test-myname.xyz.com 

Host *.xyz.com 
    Hostname %h 

Hostname *.xyz.com 
    User myuser 
    Port 12345 
    IdentityFile ~/.ssh/id_rsa 

Les cas d'utilisation exactes est un ajout récent ssh shortname1a; ssh shortname1b; ssh test-myname; ssh combo.test-myname.xyz.com

Host *.xyz.com après mise au point du dernier cas d'utilisation, et cela semble en quelque sorte à briser le premier 2.

Est-ce la bonne ou est il y a un moyen plus propre?

+0

Je pense que le "break" est arrivé parce que le 'Hostname' ne peut pas être utilisé comme je le suppose. Seul l'hôte peut être utilisé comme bloc, et une fois que j'ai ajouté un autre hôte entre le premier et le commun, ils ont été désactivés. –

Répondre

3

En plus de comprendre pourquoi la configuration était "cassée", j'ai découvert une nouvelle directive Match. Cela me permet de faire ce que j'ai l'intention

Host shortname1? 
    Hostname %h.prod.xyz.com 

Host test-myname 
    Hostname combo.test-myname.xyz.com 

Host *.xyz.com 
    Hostname %h 

Match Host *.xyz.com 
    User myuser 
    Port 12345 
    IdentityFile ~/.ssh/id_rsa 

Cette config fait exactement ce dont j'ai besoin. Je devais utiliser Host au lieu de Hostname dans le match parce qu'il ne semble pas accepter Hostname mais Host semble être exactement ce dont j'ai besoin.

J'avais un comportement arbitraire parce que j'ai mal compris que Hostname ne pouvait pas être utilisé comme j'utilisais auparavant, comme un filtre ou une instruction similaire. Il ne peut être utilisé qu'à l'intérieur d'un Host, ou Match et en tant que tel, était implicitement inférieur à la dernière instruction Host.