Configuración SSH: mismo host pero diferentes claves y nombres de usuario

31

He configurado dos cuentas de GitHub, pero no consigo que las claves ssh funcionen correctamente. He intentado varias configuraciones.


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 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 en el repositorio de username2:

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

También he intentado git pushcon ambos IdentityFiley la Userconfiguración en el mismo Host. La salida es la misma que con la última configuración.

Creo que git busca automáticamente el Host "github.com" porque el control remoto es así. Se dice que Host puede ser lo que quieras ( /programming//a/3828682 ). ¿Hay alguna forma de cambiar qué Host de ssh config debería usar un repositorio específico?

Sería ideal si pudiera resolver esto solo desde ~ / .ssh / config.

usr
fuente

Respuestas:

44

El cliente OpenSSH usa solo la Hostlínea como identificador de sección, y todo lo demás son configuraciones. Si te conectas [email protected], SSH no buscará " User foo"; solo buscará " Host bar.com".

En otras palabras: si tiene " Host github_username2" en su configuración SSH, entonces debe usar el mismo host en sus controles remotos Git github_username2, no [email protected].

Sin embargo, eso no es lo que causa fallas de autenticación. En el caso de github.com, el nombre de usuariogit SSH debe ser " " . Los servidores GitHub SSH identifican a los usuarios solo con su clave SSH.


Una configuración SSH correcta sería:

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

Configuración de Git:

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

Nota: Aunque especifiqué el gitnombre de usuario en ambos lugares en mi ejemplo, solo tiene que especificarse una vez: git@en Git URL tendrá prioridad sobre User gitSSH config.

Gravedad
fuente
2
En algunos casos, es posible que deba agregar IdentitiesOnly=yescada hostsección para asegurarse de que ssh solo seleccionará el archivo de identidad elegido y no predeterminará / intentará cualquier otra cosa ..
TCB13