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.

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 foo@bar.com, 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 git@github.com.

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.