Configuration SSH - même hôte mais clés et noms d'utilisateur différents

31

J'ai configuré deux comptes GitHub, mais je n'arrive pas à faire fonctionner correctement les clés ssh. J'ai essayé différentes configurations.


Host github_username1
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github_username2
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Fonctionne pour username1:

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_1
    User username1
Host github.com
    HostName github.com
    IdentityFile ~/.ssh/rsa_2
    User username2

git push au repo de username2:

ERROR: Permission to username2/repo.git denied to username1.
fatal: The remote end hung up unexpectedly

J'ai également essayé les git pushdeux IdentityFileet les Userparamètres sous le même Host. La sortie est la même qu'avec la dernière configuration.

Je pense que git recherche automatiquement l'hôte "github.com" car la télécommande est telle. On dit que l'hôte peut être tout ce que vous voulez ( /programming//a/3828682 ). Existe-t-il un moyen de modifier l'hôte de la configuration ssh si un dépôt spécifique est utilisé?

Ce serait idéal si je pouvais résoudre ce problème uniquement à partir de ~ / .ssh / config.

usr
la source

Réponses:

44

Le client OpenSSH utilise uniquement la Hostligne comme identifiant de section, et tout le reste sont des paramètres. Si vous vous connectez à [email protected], SSH ne recherchera pas " User foo"; il ne recherchera que " Host bar.com".

En d'autres termes: si vous avez " Host github_username2" dans votre configuration SSH, vous devez utiliser le même hôte dans vos télécommandes Git - github_username2, non [email protected].

Cependant, ce n'est pas ce qui provoque les échecs d'authentification. Dans le cas de github.com, le nom d'utilisateurgit SSH doit être " " . Les serveurs GitHub SSH identifient les utilisateurs uniquement par leur clé SSH.


Une configuration SSH correcte serait:

Host github_username1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_1
Host github_username2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/rsa_2

Configuration Git:

[remote "origin"]
    url = git@github_username1:username2/repo.git

Remarque: Même si j'ai spécifié le gitnom d'utilisateur aux deux endroits dans mon exemple, il ne doit être spécifié qu'une seule fois - git@dans Git URL aura la priorité sur User gitdans la configuration SSH.

grawity
la source
2
Dans certains cas, vous devrez peut-être ajouter IdentitiesOnly=yessur chaque hostsection pour vous assurer que ssh ne choisira que le fichier d'identité choisi et ne par défaut / n'essaiera rien d'autre.
TCB13