SSH config - mesmo host, mas diferentes chaves e nomes de usuário

21

Eu configurei duas contas do GitHub, mas não consigo fazer com 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 do username2:

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

Eu também tentei git push com as configurações IdentityFile e User sob o mesmo Host . A saída é a mesma da última configuração.

Eu acho que o git automaticamente procura por Host "github.com" porque o controle remoto é tal. Diz-se que o Host pode ser o que você quiser ( link ). Existe alguma maneira de mudar o que Host de configuração ssh deve usar repo específico?

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

    
por usr 10.12.2011 / 19:59

1 resposta

30

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

Em outras palavras: se você tiver " Host github_username2 " em sua configuração de 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ário do SSH deve ser " git " . Os servidores SSH do GitHub identificam os usuários apenas por sua chave SSH.

Uma configuração correta do SSH 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 git nome de usuário em ambos os lugares no meu exemplo, ele só precisa ser especificado uma vez - git@ no Git URL terá prioridade sobre User git na configuração SSH.

    
por 10.12.2011 / 20:34

Tags