Configuração SSH - mesmo host, mas chaves e nomes de usuários diferentes

31

Configurei duas contas do GitHub, mas não consigo que as chaves ssh funcionem corretamente. Eu tentei várias configurações.


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

Funciona para o nome de usuário1:

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 no repo de username2:

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

Eu também tentei git pushcom ambos IdentityFilee Userconfigurações sob o mesmo Host. A saída é a mesma da última configuração.

Acho que o git pesquisa automaticamente o Host "github.com" porque o controle remoto é tal. Dizem que o host pode ser o que você quiser ( /programming//a/3828682 ). Existe alguma maneira de alterar qual host da configuração ssh deve usar o repositório específico?

Seria ideal se eu pudesse resolver isso apenas em ~ / .ssh / config.

usr
fonte

Respostas:

44

O cliente OpenSSH usa apenas a Hostlinha como identificador da seção, e todo o resto são configurações. Se você se conectar [email protected], o SSH não procurará " User foo"; ele procurará apenas " Host bar.com".

Em outras palavras: Se você " Host github_username2" tiver sua configuração SSH, deverá usar o mesmo host nos seus controles remotos do Git - github_username2, não [email protected].

No entanto, não é isso que causa falhas de autenticação. No caso de github.com, o nome de usuáriogit SSH deve ser " " . Os servidores GitHub SSH identificam os usuários apenas por sua chave SSH.


Uma configuração SSH correta seria:

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

Configuração do Git:

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

Nota: Embora eu tenha especificado o gitnome de usuário nos dois lugares no meu exemplo, ele deve ser especificado apenas uma vez - o git@URL do Git terá prioridade User gitna configuração do SSH.

gravidade
fonte
2
Em alguns casos pode ser necessário adicionar IdentitiesOnly=yesem cada hostseção para se certificar de ssh só vai escolher o arquivo de identidade escolhida e não padrão / tentar qualquer outra coisa ..
TCB13