Plusieurs 'Host *' dans ssh_config?

27

Ma compréhension du fonctionnement de ~ / .ssh / config est que chaque ligne 'Host' prend effet pour tout hôte correspondant après ce point dans le fichier de configuration.

J'ai un certain nombre de serveurs personnels et de serveurs de travail auxquels je dois me connecter. J'essaie de faire quelque chose comme ceci:

# Réglages généraux
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:% p
ForwardAgent oui
ForwardX11 oui
GSSAPIAuthentication no
PubkeyAuthentication oui

# Serveurs personnels
Hôte *
User harleypig
IdentityFile ~ / .ssh / personal_id_rsa

Hôte host1
Nom d'hôte host1.com

Hôte host2
Nom d'hôte host2.com

# Serveurs de travail
Hôte *
Utilisateur alan.young
IdentityFile ~ / .ssh / work_id_rsa

Travail hôte1
Nom d'hôte work1.companyserver.com

Travail hôte2
Nom d'hôte work2.companyserver.com

Hôte *
Utilisateur devuser

Hôte dev1
Nom d'hôte dev1.companyserver.com

Hôte dev2
Nom d'hôte dev2.companyserver.com

Les documents semblent indiquer que host1 et host2 devraient utiliser 'personal_id_rsa' et l'utilisateur harleypig. work1, work2, dev1 et dev2 doivent utiliser 'work_id_rsa' et les deux premiers doivent être l'utilisateur 'alan.young' et dev1 et dev2 doivent être l'utilisateur 'devuser'

Cependant, cela ne se produit pas. Quel que soit l'hôte * que je mets en premier, c'est avec quoi tous les hôtes suivants essaient de se connecter. Suis-je incompréhensible ou manque quelque chose?

harleypig
la source
Merci, entre ces deux réponses, j'ai pu faire fonctionner mes relations.
harleypig

Réponses:

36

Du ssh_configmanuel :

Étant donné que la première valeur obtenue pour chaque paramètre est utilisée, des déclarations plus spécifiques à l'hôte doivent être fournies vers le début du fichier et des valeurs par défaut générales à la fin.

Ainsi, dans votre exemple, tous les hôtes utiliseront User harleypiget IdentityFile ~/.ssh/personal_id_rsa.

Considérez les Hostdirectives avec des caractères génériques comme des solutions de rechange: utilisez les paramètres suivants uniquement s'ils n'ont pas encore été définis. Vous devez écrire quelque chose comme ceci:

Host host1
Hostname host1.com
Host host2
Hostname host2.com
Host host*
User harleypig
IdentityFile ~/.ssh/personal_id_rsa

Vous pouvez mettre plusieurs modèles sur une Hostligne si un ensemble donné d'alias d'hôte ne peut pas être mis en correspondance avec des caractères génériques, par exemple Host host* more* outlier.

Gilles 'SO- arrête d'être méchant'
la source
15

Vous vous trompez définitivement.

  • Vous devez toujours mettre Host *comme dernière entrée.
  • Vous ne pouvez pas avoir plusieurs Host *entrées

Si vos machines de travail ont un format de nom que vous pouvez généraliser pour cibler uniquement les machines de travail, par exemple: machine1.work.com, host.work.com, fileserver.work.com, vous pouvez cibler vos machines de travail comme:

Host *.work.com
User alan.young
IdentityFile ~/.ssh/work_id_rsa

Il en va de même pour vos machines personnelles.

Hameedullah Khan
la source
Pour moi, mettre Host *au début du fichier semble bien fonctionner. Peut-être le fait que vous utilisez un caractère générique l'emporte-t-il sur le fait qu'il s'agit de la première entrée lorsque vous les hiérarchisez?
Zaz
Btw, le Host *.work.comest une syntaxe non valide. Cela ne fonctionne que dans l'autre sens:Host myserver*
Daniel Andrei Mincă
3
@ MincăDanielAndrei cela fonctionne dans les deux sens, c'est juste une expression générique et vous pouvez l'utiliser comme n'importe quel autre caractère générique. Hôte git-codecommit. *. Amazonaws.com Ceci est un exemple de travail de mon ~ / .ssh / config
Hameedullah Khan
@HameedullahKhan sérieusement, j'ai essayé et ça ne répond pas. Si vous le faites, Host *subdomain.comcela ne répondra pas.
Daniel Andrei Mincă
1
@ MincăDanielAndrei Ce comportement est documenté dans les pages de manuel, s'il ne fonctionne pas (pour moi non plus) c'est un bug.
goetzc