Konfiguracja SSH - ten sam host, ale różne klucze i nazwy użytkowników

31

Skonfigurowałem dwa konta GitHub, ale nie mogę sprawić, aby klucze ssh działały poprawnie. Próbowałem różnych konfiguracji.


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

Działa dla nazwy użytkownika 1:

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 w repozytorium username2:

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

Ja również próbowałem git pushzarówno IdentityFilei Userustawień pod same Host. Dane wyjściowe są takie same jak w ostatniej konfiguracji.

Myślę, że git automatycznie szuka hosta „github.com”, ponieważ taki jest pilot. Mówi się, że Host może być czymkolwiek chcesz ( /programming//a/3828682 ). Czy jest jakiś sposób na zmianę hosta z konfiguracji ssh, którego powinno używać określone repozytorium?

Byłoby idealnie, gdybym mógł to rozwiązać tylko z ~ / .ssh / config.

usr
źródło

Odpowiedzi:

44

Klient OpenSSH używa tylko Hostlinii jako identyfikatora sekcji, a wszystko inne to ustawienia. Jeśli się połączysz [email protected], SSH nie będzie wyszukiwać „ User foo”; wyszuka tylko „ Host bar.com”.

Innymi słowy: Jeśli masz Host github_username2konfigurację SSH, musisz używać tego samego hosta w pilotach Git - github_username2nie [email protected].

Jednak nie to powoduje niepowodzenia uwierzytelniania, w przypadku nazwy użytkownikagithub.com SSH musi być „ git . Serwery GitHub SSH identyfikują użytkowników tylko na podstawie klucza SSH.


Prawidłowa konfiguracja SSH to:

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

Konfiguracja Git:

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

Uwaga: Mimo że podałem gitnazwę użytkownika w obu miejscach w moim przykładzie, należy ją podać tylko raz - git@w Git URL będzie miał wyższy priorytet niż User gitw konfiguracji SSH.

grawitacja
źródło
2
W niektórych przypadkach może być konieczne dodanie IdentitiesOnly=yeskażdej hostsekcji, aby upewnić się, że ssh wybierze tylko wybrany plik tożsamości i nie będzie domyślnie / spróbował niczego innego.
TCB13