Modifier ssh ControlPath avec une déclaration spécifique à l'hôte

J'ai une situation où j'ai besoin d'accéder au même hôte SSH (GitHub) avec deux keys SSH différentes. Ce n'est pas un problème et je peux le configurer facilement en modifiant le nom d'hôte. Le problème vient lorsque cette configuration est combinée avec ma configuration de multiplexage SSH. Je ne peux pas ignorer mon ControlPath par défaut avec une déclaration spécifique à l'hôte.

Peut-être que c'est juste comme cela fonctionne C'est peut-être un bug? Est-ce que je fais quelque chose de mal?

Je suis sur Mac 10.7 par la manière.

Voici ma configuration:

Host * ControlMaster auto ControlPath ~/.ssh/connections/ssh-%r@%h:%p Host github.com-X TCPKeepAlive yes ServerAliveInterval 60 ControlPersist 1h Hostname github.com User git IdentityFile ~/.ssh/id_rsa_X IdentitiesOnly yes ControlPath ~/.ssh/connections/ssh-%r@%hX:%p Host github.com TCPKeepAlive yes ServerAliveInterval 60 ControlPersist 1h 

J'ai un peu brisé, mais il semble que je reçois toujours le ControlPath comme spécifié dans la déclaration Host *.

 ssh -T git@github.com-X 

Enregistre moi comme l'user correct en utilisant id_rsa_X, mais il crée le socket de domaine ici:

 ~/.ssh/connections/ssh-git@github.com:22 

Plutôt que:

 ~/.ssh/connections/ssh-git@github.com-X:22 

Ensuite, plus tard, lorsque j'essaie d'émettre une command SSH en utilisant id_rsa, je reçois l'user id_rsa_X en raison du multiplexage de connection. En d'autres termes:

 ssh -T git@github.com 

Donnez moi un message bonjour à l'user dont la key est id_rsa_X.

Des idées?

EDIT: Réponse au commentaire de vgoff – Non, il semble lire toutes mes configurations …

 $ ssh -vT git@github.com-X OpenSSH_5.6p1, OpenSSL 0.9.8y 5 Feb 2013 debug1: Reading configuration data /Users/<username>/.ssh/config debug1: Applying options for * debug1: Applying options for github.com-X debug1: Reading configuration data /etc/ssh_config debug1: Applying options for * debug1: auto-mux: Trying existing master debug1: Control socket "/Users/<username>/.ssh/connections/ssh-git@github.com:22" does not exist <snip> 

Vous pouvez voir qu'il lit tous les parameters et essaie d'utiliser le ControlPath incorrect.

Vous devez déplacer les options less spécifiques plus bas dans ~/.ssh/config . Les options de l' Host * sont appliquées en premier et elles ne sont pas écrasées par des options ultérieures, même si elles sont plus spécifiques. Les nouvelles options qui n'ont pas été spécifiées dans Host * seront cependant appliquées et je pense que c'est ce que vous avez vu dans votre journal.

Source: http://linux.die.net/man/5/ssh_config

ssh (1) obtient datatables de configuration des sources suivantes dans l'ordre suivant:

  1. options de command line
  2. Fichier de configuration de l'user (~ / .ssh / config)
  3. Fichier de configuration à l'échelle du système (/ etc / ssh / ssh_config)

Pour chaque paramètre, la première valeur obtenue sera utilisée. Les files de configuration contiennent des sections séparées par les spécifications '' Host '', et cette section est uniquement appliquée aux hôtes qui correspondent à un des motifs donnés dans la spécification. Le nom d'hôte apparié est celui indiqué sur la command line.

Comme la première valeur obtenue pour chaque paramètre est utilisée, plus de déclarations spécifiques à l'hôte doivent être données près du début du file et des valeurs par défaut générales à la fin .