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]:accountname
deben usar id_rsa
y [email protected]:anotheraccount
deberían usar id_rsa_anotheraccount
.
git pull
seguí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 pull
desde 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/config
fue 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-add
Era lo que me faltaba.IdentitiesOnly yes
a laHost *
sección de su~/.ssh/config
archivo. 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
alice
es un usuario de github.com, con 2 o más repositorios privadosrepoN
. Para este ejemplo, trabajaremos con solo dos repositorios nombradosrepo1
yrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Debe extraerse de estos repositorios sin ingresar una contraseña probablemente en un servidor o en varios servidores. Desea realizar,
git pull origin master
por 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/config
un 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/config
archivo de su repositorio y modificó la URL de su control remotoorigin
para que sea algo así:Y finalmente fuiste a la
Settings > Deploy keys
sección de repositorio y agregaste el contenido dealice_github.id_rsa.pub
En este punto, puede hacerlo
git pull origin master
sin 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
repo2
las 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:repo1
Par de claves:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2
Par de claves:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
Ahora colocará la nueva clave pública en
repo2
la 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.com
dominio?Su
.ssh/config
archivo apuntagithub.com
y 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.com
yrepo2.github.com
Entonces, lo primero es editar los
.git/config
archivos en sus clones de repositorio, para que se vean así:Para repo1
Para repo2
Y luego, en su
.ssh/config
archivo, ahora podrá ingresar una configuración para cada subdominio :)Ahora puede hacerlo
git pull origin master
sin 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/config
es 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_key
Configuració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
:Host
github- <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-kc
identificar 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.git
Host
]Hostname
especifique el nombre de host real, solo use
github.com
para github,User
gitel usuario es siempre
git
para github,IdentityFile
especifique la clave a usar, simplemente ponga la ruta de la clave pública,
LogLevel
especifique el nivel de registro para depurar, si hay algún problema,
DEBUG3
proporciona 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-add
porque sus claves no están protegidas con contraseña o (si está en una Mac) el llavero OSX lo está manejando por usted.ssh-add
evita que necesite ingresar la frase de contraseña cada vez que accede a sus claves.Use el
IdentityFile
pará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
.\keyfile
y.\keyfile.pub
)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
Subir
keyfile.pub
al proveedor gitps -ef | grep ssh-agent
si ya se está ejecutando)ssh-add .\keyfile
para agregar credencialesgit clone git@provider:username/project.git
fuente
Pasé mucho tiempo para comprender todos los pasos. Así que describamos paso a paso:
ssh-keygen -t rsa
. Dale una alternativa comoproj1.id_rsa
y 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.com
volveremos a la sección más adelante.ssh-add ~/.ssh/proj1.id_rsa
proj1.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_proj1
y enproj1_id_rsa
realidad deberían ser los mismos. También puede agregar la parte sobre la.git/config
configuración del tutorial a su respuesta.proj1.id_rsa
vs.proj1_id_rsa
Solí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
-f
cuando genere una nueva clave SSH para otra cuenta,Como el
id_rsa_work
archivo 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