Tengo problemas para conseguir que dos claves SSH / cuentas GitHub diferentes funcionen bien juntas. Tengo la siguiente configuración:
Repos accesible desde una cuenta usando [email protected]:accountname
Repos accesible desde otra cuenta usando [email protected]:anotheraccount
Cada cuenta tiene su propia clave SSH. Se han agregado ambas claves SSH y he creado un archivo de configuración. Sin embargo, no creo que el archivo de configuración sea correcto. No estoy muy seguro de cómo especificar que los repositorios a los que se accede [email protected]:accountnamedeben usar id_rsay [email protected]:anotheraccountdeberían usar id_rsa_anotheraccount.

git pullseguía fallando y solicitaba el código de acceso de la escuela, a pesar de los archivos de identidad separados, "IdentitiesOnly = yes", dominios y nombres de host separados, todos presentes enssh-add -l... La clave uni era 'primero' independientemente de esa configuración. Tuve que mover su sección debajo de las otras en .ssh / config, y ahoragit pulldesde ambos actos de GitHub tiene éxito sin pedir una contraseña uni ssh.Respuestas:
La respuesta de Andy Lester es precisa, pero encontré un paso adicional importante que necesitaba hacer para que esto funcionara. Al tratar de configurar dos perfiles, uno para el personal y otro para el trabajo, mi
~/.ssh/configfue más o menos de la siguiente manera:Mi perfil de trabajo no tomó hasta que hice un
ssh-add ~/.ssh/work_rsa. Después de eso, las conexiones a github usaron el perfil correcto. Anteriormente, por defecto, la primera clave pública.Para No se pudo abrir una conexión con su agente de autenticación al usar
ssh-add,consulte: https://stackoverflow.com/a/17695338/1760313
fuente
ssh-addEra lo que me faltaba.IdentitiesOnly yesa laHost *sección de su~/.ssh/configarchivo. Esto le dice a ssh que realmente use los IdentityFiles que especifique, en lugar de enviar spam al servidor con todos ellos.Recientemente tuve que hacer esto y tuve que examinar todas estas respuestas y sus comentarios para finalmente juntar la información, así que lo pondré todo aquí, en una publicación, para su conveniencia:
Paso 1: teclas ssh
Crea cualquier par de llaves que necesites. En este ejemplo, me he llamado default / original 'id_rsa' (que es el predeterminado) y mi nuevo 'id_rsa-work':
Paso 2: ssh config
Configure múltiples perfiles ssh creando / modificando ~ / .ssh / config . Tenga en cuenta los valores ligeramente diferentes de 'Host':
Paso 3: ssh-add
Puede o no tener que hacer esto. Para verificar, enumere las huellas digitales de identidad ejecutando:
Si sus entradas no están allí, ejecute:
Paso 4: prueba
Para probar que has hecho todo esto correctamente, sugiero la siguiente comprobación rápida:
Tenga en cuenta que tendrá que cambiar el nombre de host (github / work.github) dependiendo de la clave / identidad que le gustaría usar. ¡Pero ahora deberías estar listo! :)
fuente
Digamos que
alicees un usuario de github.com, con 2 o más repositorios privadosrepoN. Para este ejemplo, trabajaremos con solo dos repositorios nombradosrepo1yrepo2https://github.com/alice/repo1https://github.com/alice/repo2Debe extraerse de estos repositorios sin ingresar una contraseña probablemente en un servidor o en varios servidores. Desea realizar,
git pull origin masterpor ejemplo, y desea que esto suceda sin solicitar una contraseña.No le gusta tratar con ssh-agent, ha descubierto (o lo está descubriendo ahora) sobre
~/.ssh/configun archivo que le permite a su cliente ssh saber qué clave privada usar según el nombre de host y el nombre de usuario, con una entrada de configuración simple que se parece esta:Así que siguió adelante y creó su
(alice_github.id_rsa, alice_github.id_rsa.pub)par de claves, luego también fue al.git/configarchivo de su repositorio y modificó la URL de su control remotooriginpara que sea algo así:Y finalmente fuiste a la
Settings > Deploy keyssección de repositorio y agregaste el contenido dealice_github.id_rsa.pubEn este punto, puede hacerlo
git pull origin mastersin ingresar una contraseña sin problemas.pero ¿qué pasa con el segundo repositorio?
Por lo tanto, su instinto será tomar esa clave y agregarla a
repo2las claves de implementación, pero github.com generará un error y le dirá que la clave ya se está utilizando.Ahora ve y genera otra clave (usando
ssh-keygen -t rsa -C "[email protected]"sin contraseñas, por supuesto), y para que esto no se convierta en un desastre, ahora nombrarás tus claves de esta manera:repo1Par de claves:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)repo2Par de claves:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)Ahora colocará la nueva clave pública en
repo2la configuración de implementación de claves en github.com, pero ahora tiene que resolver un problema de ssh.¿Cómo puede saber ssh qué clave usar si los repositorios están alojados en el mismo
github.comdominio?Su
.ssh/configarchivo apuntagithub.comy no sabe qué tecla usar cuando es el momento de hacer la extracción.Así que encontré un truco con github.com. Puede decirle a su cliente ssh que cada repositorio vive en un subdominio github.com diferente, en estos casos, serán
repo1.github.comyrepo2.github.comEntonces, lo primero es editar los
.git/configarchivos en sus clones de repositorio, para que se vean así:Para repo1
Para repo2
Y luego, en su
.ssh/configarchivo, ahora podrá ingresar una configuración para cada subdominio :)Ahora puede hacerlo
git pull origin mastersin ingresar ninguna contraseña de ambos repositorios.Si tiene varias máquinas, puede copiar las claves en cada una de las máquinas y reutilizarlas, pero le aconsejaría hacer el trabajo de pierna para generar 1 clave por máquina y repositorio. Tendrás muchas más claves que manejar, pero serás menos vulnerable si una se ve comprometida.
fuente
.ssh/configes el paso crucial, muchas gracias por esoTengo 2 cuentas en github, y esto es lo que hice (en
linux) para que funcione.Llaves
ssh-keygen, asígneles un nombre adecuado, para que la vida sea más fácil.ssh-add path_to_private_keyConfiguración
~ / .ssh / config
Establezca la URL remota para el repositorio:
Para el repositorio en el host
github-kc:Para el repositorio en el host
github-abc:Explicación
Opciones en
~/.ssh/config:Hostgithub- <identify_specific_user>Host podría ser cualquier valor que pudiera identificar un host más una cuenta, no necesita ser un host real, por ejemplo,
github-kcidentificar una de mi cuenta en github para mi computadora portátil local,Cuando se configura la URL remota para un repositorio git, este es el valor que se debe poner después
git@, así es como un repositorio se asigna a un Host, por ejemplogit remote set-url origin git@github-kc:kuchaguangjie/pygtrans.gitHost]Hostnameespecifique el nombre de host real, solo use
github.compara github,Usergitel usuario es siempre
gitpara github,IdentityFileespecifique la clave a usar, simplemente ponga la ruta de la clave pública,
LogLevelespecifique el nivel de registro para depurar, si hay algún problema,
DEBUG3proporciona la información más detallada.fuente
ssh-add path_to_private_key, probablemente porque no se requiere el agente en este caso. El archivo de configuración está definiendo explícitamente la ruta a las claves.ssh-addporque sus claves no están protegidas con contraseña o (si está en una Mac) el llavero OSX lo está manejando por usted.ssh-addevita que necesite ingresar la frase de contraseña cada vez que accede a sus claves.Use el
IdentityFileparámetro en su~/.ssh/config:fuente
Una alternativa posiblemente más simple para editar el archivo de configuración ssh (como se sugiere en todas las otras respuestas), es configurar un repositorio individual para usar una clave ssh diferente (por ejemplo, no predeterminada).
Dentro del repositorio para el que desea usar una clave diferente, ejecute:
Y asegúrese de que su clave se agregue al agente ssh ejecutando:
Tenga en cuenta que el comando anterior solo agregará la clave al agente ssh para su sesión actual. Si desea que esto funcione para siempre, debe agregarlo "permanentemente" a su agente ssh. Por ejemplo, aquí se explica cómo hacerlo para ubuntu y aquí para OSX .
También debería ser posible escalar este enfoque a múltiples repositorios utilizando la configuración global de git y las inclusiones condicionales ( ver ejemplo ).
fuente
En mi caso, ninguna de las soluciones anteriores resolvió mi problema, pero ssh-agent sí. Básicamente, hice lo siguiente:
Genere el par de claves usando ssh-keygen que se muestra a continuación. Generará un par de claves (en este ejemplo
.\keyfiley.\keyfile.pub)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfileSubir
keyfile.pubal proveedor gitps -ef | grep ssh-agentsi ya se está ejecutando)ssh-add .\keyfilepara agregar credencialesgit clone git@provider:username/project.gitfuente
Pasé mucho tiempo para comprender todos los pasos. Así que describamos paso a paso:
ssh-keygen -t rsa. Dale una alternativa comoproj1.id_rsay golpea sin duda porque no necesitas una frase de contraseña.Agregar nueva sección en
.ssh/config:Tenga en cuenta la primera sección y tenga en cuenta que
proj1.github.comvolveremos a la sección más adelante.ssh-add ~/.ssh/proj1.id_rsaproj1.github.com(exactamente el host del archivo de configuración).git clone [email protected].Un buen tutorial
No te metas con los anfitriones
fuente
id_rsa_proj1y enproj1_id_rsarealidad deberían ser los mismos. También puede agregar la parte sobre la.git/configconfiguración del tutorial a su respuesta.proj1.id_rsavs.proj1_id_rsaSolía,
Funcionó bien.
Use la configuración anterior en su archivo .ssh / config para diferentes claves rsa para diferentes nombres de usuario.
fuente
Como complemento de la respuesta de @stefano, es mejor usar el comando
-fcuando genere una nueva clave SSH para otra cuenta,Como el
id_rsa_workarchivo no existe en la ruta~/.ssh/, y creo este archivo manualmente, y no funciona :(fuente
Publiqué la técnica que uso para tratar con esto aquí
fuente