usuario multiples mac cuentas cuenta configurar cambiar ssh github ssh-keys

multiples - ssh git



Múltiples cuentas de GitHub y configuración de SSH (11)

Como complemento de la respuesta de @stefano, es mejor usar el comando con -f cuando se genera una nueva clave SSH para otra cuenta,

ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "[email protected]"

Como el archivo id_rsa_work no existe en la ruta ~/.ssh/ , y creo este archivo manualmente, y no funciona :(

Estoy teniendo problemas para conseguir que dos claves SSH / GitHub diferentes jueguen bien juntas. Tengo la siguiente configuración:

Repos accesibles desde una cuenta usando [email protected]:accountname

Repos accesibles 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. Aunque no creo que el archivo de configuración sea correcto. No estoy muy seguro de cómo especificar los [email protected]:accountname a los que se accede usando [email protected]:accountname debe usar id_rsa y [email protected]:anotheraccount debe usar id_rsa_anotheraccount .


Digamos que alice es un usuario de github.com, con 2 o más repositorios privados repoN . Para este ejemplo trabajaremos con solo dos repositorios llamados repo1 y repo2

https://github.com/alice/repo1

https://github.com/alice/repo2

Debe extraer 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 pedir una contraseña.

No le gusta tratar con ssh-agent, ha descubierto (o está descubriendo ahora) acerca de ~/.ssh/config un archivo que le permite a su cliente ssh saber qué clave privada usar, dependiendo del nombre de host y el nombre de usuario, con un Entrada de configuración simple que se ve así:

Host github.com HostName github.com User git IdentityFile /home/alice/.ssh/alice_github.id_rsa IdentitiesOnly yes

Así que siguió adelante y creó su (alice_github.id_rsa, alice_github.id_rsa.pub) , luego también fue al archivo .git/config su repositorio y modificó la url de su origin remoto para que sea como esto:

[remote "origin"] url = "ssh://[email protected]/alice/repo1.git"

Finalmente, accedió a la sección Settings > Deploy keys repositorio Settings > Deploy keys y agregó el contenido de alice_github.id_rsa.pub

En este punto, puede hacer su git pull origin master sin ingresar una contraseña sin problema.

pero ¿qué pasa con el segundo repositorio?

De modo que su instinto será agarrar esa clave y agregarla a las claves de implementación de repo2, pero github.com generará un error y le dirá que la clave ya está siendo utilizada.

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 así:

  • par de repo1 : (repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
  • par de repo2 : (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)

Ahora colocará la nueva clave pública en la configuración de las claves de implementación de repo2 en github.com, pero ahora tiene un problema ssh con el que lidiar.

¿Cómo puede ssh decir qué clave usar si los repositorios están alojados en el mismo dominio github.com ?

Su archivo .ssh/config apunta a github.com y no sabe qué clave usar cuando es el momento de hacer el tiró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 y repo2.github.com

Así que lo primero es editar los archivos .git/config en tus clones de repositorios, para que se vean así:

Para repo1

[remote "origin"] url = "ssh://[email protected]/alice/repo1.git"

Para repo2

[remote "origin"] url = "ssh://[email protected]/alice/repo2.git"

Y luego, en su archivo .ssh/config , ahora podrá ingresar una configuración para cada subdominio :)

Host repo1.github.com HostName github.com User git IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa IdentitiesOnly yes Host repo2.github.com HostName github.com User git IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa IdentitiesOnly yes

Ahora puede 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 aconsejo hacer el trabajo de piernas para generar 1 clave por máquina y repo. Tendrás muchas más claves que manejar, pero serás menos vulnerable si una se ve comprometida.


En mi caso, ninguna de las soluciones anteriores resolvió mi problema, pero ssh-agent sí. Básicamente, hice lo siguiente:

  1. Genere el par de claves utilizando ssh-keygen como se muestra a continuación. ./keyfile.pub un par de claves (en este ejemplo ./keyfile y ./keyfile.pub )

    ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile

  2. Subir keyfile.pub al proveedor git

  3. Inicie ssh-agent en su máquina (puede verificar con ps -ef | grep ssh-agent para ver si ya se está ejecutando)
  4. Ejecute ssh-add ./keyfile para agregar credenciales
  5. Ahora puede ejecutar git clone git@provider:username/project.git

Hace poco tuve que hacer esto y tuve que analizar 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 nombré por defecto / original ''id_rsa'' (que es el predeterminado) y mi nuevo ''id_rsa-work'':

ssh-keygen -t rsa -C "[email protected]"


Paso 2: configuración ssh
Configure múltiples perfiles ssh creando / modificando ~ / .ssh / config . Tenga en cuenta los valores ''Host'' ligeramente diferentes:

# Default GitHub Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa # Work GitHub Host work.github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_work


Paso 3: ssh-add
Puede o no tener que hacer esto. Para verificar, haga una lista de huellas digitales de identidad ejecutando:

$ ssh-add -l 2048 1f:1a:b8:69:cd:e3:ee:68:e1:c4:da:d8:96:7c:d0:6f stefano (RSA) 2048 6d:65:b9:3b:ff:9c:5a:54:1c:2f:6a:f7:44:03:84:3f [email protected] (RSA)

Si sus entradas no están allí, ejecute:

ssh-add ~/.ssh/id_rsa_work


Paso 4: prueba
Para probar que has hecho todo esto correctamente, sugiero la siguiente comprobación rápida:

$ ssh -T [email protected] Hi stefano! You''ve successfully authenticated, but GitHub does not provide shell access. $ ssh -T [email protected] Hi stefano! You''ve successfully authenticated, but GitHub does not provide shell access.

Tenga en cuenta que tendrá que cambiar el nombre de host (github / work.github) dependiendo de qué clave / identidad desea usar. Pero ahora debes ser bueno para irte! :)


La respuesta de Andy Lester es precisa, pero encontré un paso adicional importante que necesitaba hacer para que esto funcionara. Al intentar configurar dos perfiles, uno para personal y otro para trabajo, mi ~/.ssh/config fue aproximadamente lo siguiente:

Host me.github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/me_rsa Host work.github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/work_rsa

Mi perfil de trabajo no funcionó hasta que hice un ssh-add ~/.ssh/work_rsa . Después de eso las conexiones a github utilizaron el perfil correcto. Anteriormente se establecía por defecto la primera clave pública.

No se pudo abrir una conexión con su agente de autenticación cuando se usa ssh-add ,
Compruebe: https://.com/a/17695338/1760313


Pasé mucho tiempo para entender todos los pasos. Así que vamos a describir paso a paso:

  1. Cree un nuevo archivo de identidad usando ssh-keygen -t rsa . Dale una alternativa como proj1.id_rsa y proj1.id_rsa sin duda porque no necesitas una frase de contraseña.
  2. Añadir nueva sección en .ssh/config :

    Host proj1.github.com
    HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/proj1.id_rsa

Tenga en cuenta la primera sección y tenga en cuenta que proj1.github.com volveremos a la sección más adelante.

  1. Agregue la identidad al agente ssh-add ~/.ssh/proj1.id_rsa
  2. Eso es lo que me metí la primera vez; ahora, cuando desea clonar un repositorio de proj1, hágalo utilizando proj1.github.com (exactamente el host del archivo de configuración). git clone [email protected] .

Un buen tutorial.

No te metas con los anfitriones


Solía,

Host github.com HostName github.com IdentityFile ~/.ssh/github_rsa User [email protected]

Se veía bien.

Use la configuración anterior en su archivo .ssh / config para diferentes claves rsa para diferentes nombres de usuario.


Tengo 2 cuentas en github, y esto es lo que hice (en linux ) para que funcione.

Llaves

  • Cree 2 pares de claves rsa, a través de ssh-keygen , ssh-keygen nombre correctamente, para que sea más fácil.
  • Agregue claves privadas al agente local a través de ssh-add path_to_private_key
  • Para cada cuenta de github, cargue una clave pública (distinta).

Configuración

~ / .ssh / config

Host github-kc Hostname github.com User git IdentityFile ~/.ssh/github_rsa_kc.pub # LogLevel DEBUG3 Host github-abc Hostname github.com User git IdentityFile ~/.ssh/github_rsa_abc.pub # LogLevel DEBUG3

Establecer url remoto para repo:

  • Para repo en Host github-kc :
    git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
  • Para repo en Host github-abc :
    git remote set-url origin git@github-abc:abcdefg/yyy.git

Explicacion

Opciones en ~/.ssh/config :

  • Host github- <identify_specific_user>
    El host puede ser cualquier valor que pueda identificar un host más una cuenta, no es necesario que sea un verdadero host, por ejemplo, github-kc identifica una de mis cuentas en github para mi computadora portátil local,

    Cuando se configura la url remota para un repositorio de git, este es el valor para poner después de git@ , así es como un repo se asigna a un Host, por ejemplo, git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git


  • [Las siguientes son sub opciones de Host ]
  • Hostname
    Especifique el nombre de host real, solo use github.com para github,
  • User git
    el usuario es siempre git para github,
  • IdentityFile
    Especifique la clave a utilizar, simplemente coloque la ruta de acceso de una clave pública,
  • LogLevel
    Especifique el nivel de registro para depurar, si hay algún problema, DEBUG3 proporciona la información más detallada.

Una alternativa posiblemente más simple para editar el archivo de configuración ssh (como se sugiere en todas las demás respuestas), es configurar un repositorio individual para usar una clave ssh diferente (por ejemplo, no predeterminada).

Dentro del repositorio para el que desea utilizar una clave diferente, ejecute:

git config core.sshCommand ''ssh -i ~/.ssh/id_rsa_anotheraccount''

Y asegúrese de que su clave se agregue a ssh-agent ejecutando:

ssh-add ~/.ssh/id_rsa_anotheraccount

Tenga en cuenta que el comando anterior solo agregará una clave al ssh-agent para su sesión actual. Si desea que esto funcione, debe agregarlo "permanentemente" a su agente ssh. Por ejemplo, aquí está 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 ).


Use el parámetro IdentityFile en su ~/.ssh/config :

Host github.com HostName github.com IdentityFile ~/.ssh/github.rsa User petdance


Utilizo los scripts de shell para cambiarme a cualquier cuenta que quiera que esté "activa". Esencialmente, comienza de nuevo, obtiene una cuenta configurada correctamente y funciona, luego mueve estos archivos a un nombre con el prefijo adecuado. A partir de entonces, puede utilizar el comando "github" o "gitxyz" para cambiar:

# my github script cd ~/.ssh rm id_rsa rm id_rsa.pub rm config ln git_dhoerl id_rsa ln git_dhoerl.pub id_rsa.pub ln config_dhoerl config git config --global user.email "[email protected]" git config --global github.user "dhoerl" # git config --global github.token "whatever_it_is" # now unused ssh-add -D

He tenido mucha suerte con esto. También creé un script de ejecución en Xcode (para los usuarios de Mac), por lo que no compilaría mi proyecto a menos que tuviera la configuración adecuada (ya que usa git):

Ejecutar el script colocado después de las dependencias:

#! /bin/ksh if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ] then exit 1 fi