83

Cómo agregar múltiples cuentas Git y GitHub en la misma computadora

25950Puntos

hace 3 meses

Curso Profesional de Git y GitHub
Curso Profesional de Git y GitHub

Curso Profesional de Git y GitHub

Deja de versionar tus proyectos usando tu propio sistema de control de versiones. Mejor usa Git, el sistema de control de versiones por excelencia que utiliza la industria tecnológica. Aprende a trabajar con git, conceptos básicos, clonar un repositorio y gestionar tus proyectos alojándolos en tu repositorio local y en GitHub.

Ya aprendimos cómo firmar y verificar tus commits con una llave GPG para agregar una capa de seguridad y validación. Ahora aprenderemos cómo podemos tener más de una cuenta de GitHub / GitLab en la misma computadora.

Cabe mencionar que debemos tener minimamente la versión 2.13 de Git

Hace poco inicié en otra empresa en la cual me dijeron que por razones de seguridad y NDA (Non Disclosure Agreement) debía usar una cuenta de GitHub con el correo que me habían dado al ingresar a la empresa.

En ese momento tuve la duda de cómo puedo tener dos cuentas de Git & GitHub en la misma computadora para poder seguir trabajando en mis proyectos personales sin tener que estar saliendo y entrando de una cuenta a otra.

Al principio pensé en hacer el cambio manualmente cada vez que hiciera algún proyecto personal, pero eso realmente no es escalable y siendo sinceros, somos devs; siempre podemos hacerlo mejor y automatizarlo.

Primeros pasos

Vamos a partir de 0, para poder que cualquier persona pueda seguir esta guía. Es por eso que lo primero que vamos a realizar será generar nuestras llaves privadas (ssh-keys). Lo ideal es crear una por cada cuenta.

1. Creando nuestras llaves privadas

El proceso es muy similar en Windows / Linux y Mac OS, por ahora sigue los pasos sin importar tu sistema operativo

Este comando creará un par de llaves, una pública y una privada.

ssh-keygen -t rsa -b 4096 -C "email"

Corremos el siguiente comando para la validación del ssh-agent

eval $(ssh-agent -s)

Acá es cuando el proceso en Mac OS es un poco diferente, ya que lo que haríamos en un caso normal con una sola cuenta sería generar un archivo config, pero en este caso como vamos a agregar más de una eso será un paso que nos vamos a saltar.

Por último agregamos la llave privada al sistema. En esta caso los comandos son ligeramente distintos en Mac

Windows y Linux

ssh-add ~/.ssh/id_rsa_personal

Mac OS

ssh-add -K ~/.ssh/id_rsa_personal

Ahora únicamente debemos copiar el contenido nuestra llave pública, (la que termina en .pub) y llevarlo a GitHub. Para ello solo debes de hacer el siguiente comando en tu terminal

cat ~/.ssh/id_rsa_personal.pub

Ahora. Vas a GitHub > settings > SSH and GPG keys > New SSH key

Y listo! Ahora este mismo proceso deberás hacerlo por cada cuenta adicional que vayas a agregar, para efectos de este tutorial vamos a suponer que ya generaste tus llaves, la de tu cuenta personal y la de la cuenta de tu trabajo.

Te recomiendo cambiarles el nombre para que las puedas distinguir fácilmente. Por ejemplo así lo hice yo.

id_rsa_personal #llave privada para mi cuenta personal
id_rsa_personal.pub  #llave publica para mi cuenta personal
id_rsa_trabajo #llave privada para mi cuenta de trabajo
id_rsa_trabajo.pub #llave publica para mi cuenta de trabajo

2. Editando el archivo .gitconfig

Por lo general deberíamos de tener un archivo en nuestro root que sea donde viven las configuraciones de git el cual luce más o menos así

[user]
  name        = <Your name>
  email       = <Your email>
  signingKey  = <Your signingKey>

[init]
  defaultBranch = main

...
[other configs]
...

Lo que necesitaremos será remover todo el bloque [user] y dejar solamente las configuraciones generales.

Para ellos puedes usar el siguiente comando:

nano ~/.gitconfig

Al final deberías de tener el archivo más o menos así:

[init]
  defaultBranch = main

...
[other configs]
...

3. Añadiendo nuestras propias configuraciones

Ahora debes crear un archivo por cada cuenta que quieras agregar, supongamos que quieres agregar tu cuenta de GitHub asociada a tu correo personal y otra cuenta asociada con el correo de tu trabajo

Para crear los archivos podemos ejecutar el siguiente comando

touch ~/.gitconfig.personal ~/.gitconfig.trabajo

Cabe resaltar que el .personal y .trabajo no tienen que ser exactamente estos, puedes ponerles el nombre que más te parezca, solo recuerda que deben ser distintos entre ellos

Ahora debemos añadir las configuraciones para cada cuenta; empecemos con el archivo .gitconfig.personal, acá pondremos el bloque [user] que retiramos en el paso anterior

nano ~/.gitconfig.personal

Así deberíamos de tener el archivo .gitconfig.personal

[user]
  name        = <Your name>
  email       = <Your email>
  signingKey  = <Your signingKey>

Ahora hacemos lo mismo para la otra cuenta, la del trabajo.

nano ~/.gitconfig.trabajo

Así deberíamos de tener el archivo .gitconfig.trabajo

[user]
  name        = <Your name>
  email       = <Your [email protected]>
  signingKey  = <Your signingKey>

[url "[email protected]"]
  insteadOf = [email protected]

Acá agregaremos algo adicional, y es un subhost personalizado. Debemos de tenerlo en cuenta para un paso que haremos más adelante.

¡Ya casi acabamos, queda poco

4. Definiendo las rutas de trabajo

Ahora debemos de decirle a git que cuando creemos o descarguemos un proyecto sepa que cuenta usar, y para esto debemos automatizarlo, para no tener que hacerlo manualmente cada que creemos o descargaremos proyectos.

Para esto debemos definir que cuando creemos o descargamos un proyecto en una ruta, tome una configuración de cuentas; y de hacerlo en otra ruta tome otra configuración de cuentas

Puedes definir lo de la siguiente manera:

Vas a crear una carpeta en la ruta que tú quieras almacenar todos tus proyectos personales, para simplicidad en este tutorial lo haremos así, pero recuerda que tú puedes en cualquier ruta.

  • ~/Personal/ Esta será la ruta en donde yo guardare mis proyectos personales
  • ~/Trabajo/ Esta será la ruta en donde yo guardare los proyectos que tengan que ver con el trabajo

Para crear las carpetas de manera rápida puedes usar el siguiente comando en tu terminal:

mkdir ~/Personal ~/Trabajo

Ahora a nuestro archivo .gitconfig el que es el general, el archivo base, le agregaremos las siguientes lineas:

[include]
  # Valor por default para git; de esta manera, por defecto siempre usaremos nuestra cuenta personal
  path = ~/.gitconfig.personal

[includeIf "gitdir:~/Trabajo/"]
  # Todos los proyectos que descarguemos o creemos a partir de esta ruta, usara tu cuenta de tu trabajo
  path = ~/.gitconfig.trabajo

[includeIf "gitdir:~/Personal/"]
  # Todos los proyectos que descarguemos o creemos a partir de esta ruta, usara tu cuenta personal# este bloque es opcional, pero debes de asegurarte de colocar el primer bloque.
  path = ~/.gitconfig.personal

[init]
  defaultBranch = main

...
[other configs]
...

5. Agregando la configuración de ssh

Ahora debemos modificar o crear un archivo config dentro de tu carpeta ~/.ssh y escribe lo siguiente:

Puedes usar el siguiente comando:

nano ~/.ssh/config
Host github.com
  User          <your github username personal account>
  HostName      github.com
  # La ruta a tu llave privada asociada a tu cuenta personal
  IdentityFile  ~/.ssh/id_rsa_personal

  # Este host tiene que ser el mismo que pusimos en el paso tres
Host trabajo.github.com
  User          <your github username work account>
  HostName      github.com
  # La ruta a tu llave privada asociada a tu cuenta de trabajo
  IdentityFile  ~/.ssh/id_rsa_trabajo

Host *
  AddKeysToAgent            yes
  IdentitiesOnly            yes
  UseKeychain               yes
  Compression               yes
  PreferredAuthentications  publickey

¡Felicidades, eso sería todo! ¡No olvides agregar tus llaves públicas a tus cuentas de GitHub!

Validaciones

Si quieres probar que todo este OK, lo podemos hacer desde nuestra terminal, solo debemos de correr los siguientes comandos:

ssh -T [email protected]
ssh -T [email protected]

Lo que debería de salirte sería algo así, para cada cuenta:

The authenticity of host github.com (#######) can not be established.
###### key fingerprint is SHA256
This key is not known by any other names

Are you sure you want to continue connecting (yes/no/[fingerprint])? **yes**
Warning: Permanently added github.com (####) to the list of known hosts.
Hi <Yourgithubusername>! You've successfully authenticated, but GitHub does not provide shell access.

Ahora ya sabes como agregar más de una cuenta de GitHub / GitLab a una misma computadora. Recuerda que puedes ver nuestro curso profesional de Git & GitHub y seguir aprendiendo a emplear esta herramienta como toda una profesional.
Déjame saber en los comentarios si te gusto este post y que tipo de temas te gustaría aprender en mi próximo artículo para que nunca paremos de aprender.

Curso Profesional de Git y GitHub
Curso Profesional de Git y GitHub

Curso Profesional de Git y GitHub

Deja de versionar tus proyectos usando tu propio sistema de control de versiones. Mejor usa Git, el sistema de control de versiones por excelencia que utiliza la industria tecnológica. Aprende a trabajar con git, conceptos básicos, clonar un repositorio y gestionar tus proyectos alojándolos en tu repositorio local y en GitHub.
Juan Sebastián
Juan Sebastián
juansacdev

25950Puntos

hace 3 meses

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
6

Que buena y util explicación, valiosa información, gracias Juan.

2
25950Puntos
3 meses

Gracias a ti Javier por leer!

3
10776Puntos

Ohh, ya no tengo que recurir a otro pc para hacer mi curso de Git & Github.
Gracias!!!

2
25950Puntos
3 meses

Que bueno que te fue util!

3
3116Puntos

Execelente explicacion Juan, super sencillo de seguir. Gracias por compartir tus conocimientos.

3
3231Puntos

Llevo días, y varios intentos tratando de hacer esto que ha explicado @juansacdev de forma tan clara y concreta. Sin ni siquiera probarlo todavía, le felicito por este post y voy a seguir paso a paso sus notas para implementarlo.
Muchas gracias.
Por cosas como estas uso Platzi.

3
41370Puntos

Esta buenísimo Juanse! Espero ver más blogs tuyos 😄

2
25950Puntos
3 meses

Muchas gracias Alex! Claro que sí. Ya estoy trabajando en el proximo post! 👨🏻‍💻

2
7297Puntos

Excelente aporte!! No sabía que lo necesitaba.

2
5828Puntos

Podemos automatizar el inicio del shh-agente además del agregado de llaves (ssh-add) creando el archivo .bashrc en la carpeta de nuestro usuario de Windows %user_profile%/.bashrc, si deseas crear dicho archivo desde bash con git, puedes usar

# Para crear y editar el archivo usamos:
touch ~/.bashrc && vim ~/.bashrc
# El comando anterior se puede entender como: Crea el archivo .bashrc en el carpeta del usuario del S.O y si no hubo errores enla creación abre el archivo con vim

Luego solo habría que copiar el siguiente codigo brindado por la documentación de github para automatizar el proceso, solo que para este caso lo modifique un poco para poder agregar todas las llaves ssh que se hayan creado

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

# Este if solo valida que el ssh-agent se este ejecutando, si no lo esta lo ejecuta
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add ~/.ssh/id_rsa # especificamos la ruta de nuestra llave privada y su nombre
    ssh-add ~/.ssh/id_rsa_trabajo # ruta para otra llave y su nombre
    # Así para todas las llaves quese vayan creando .. 

# Este ifse ejecutad cuando el ssh-agent se esta ejecutando
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    # Todas las llaves agregadas en el if anterior tambiénse deben agregar en este
    ssh-add ~/.ssh/id_rsa # especificamos la ruta de nuestra llave privada y su nombre
    ssh-add ~/.ssh/id_rsa_trabajo # ruta para otra llave y su nombre
    # Así para todas las llaves quese vayan creando .. 
fi

unset env
2

Buenas! Es un excelente tutorial, pero me surge una duda que es lo que me está trancando:

signingKey = <Your signingKey>

¿A qué se refiere con signingKey? ¿Cómo se cuál es?

Saludos

2
5857Puntos

Muy util para el trabajo en equipo o si tienes mas de un computador.

1
8360Puntos

Realice todo el proceso paso a paso, todo salio bien en las validaciones, tanto en la personal como en la de trabajo.

Pero me encuentro estre error cuando quiero interactuar con git desde el proyecto:

fatal:bad config line17 in file /home/carlosv22/.gitconfig

Adjunto el archivo al cual el error hace referencia:
En la linea 17 solo hay … (tres puntos)

[include]
    # Valor por default para git; de esta manera, por defecto siempre usaremos nuestra cuenta personal
    path = ~/.gitconfig.personal

[includeIf "gitdir:~/Trabajo/"]
    # Todos los proyectos que descarguemos o creemos a partir de esta ruta, usara tu cuenta de tu trabajo
    path = ~/.gitconfig.trabajo

[includeIf "gitdir:~/Personal/"]
    # Todos los proyectos que descarguemos o creemos a partir de esta ruta, usara tu cuenta personal
    # este bloque es opcional, pero debes de asegurarte de colocar el primer bloque.
    path = ~/.gitconfig.personal

[init]
    defaultBranch = master

...
[other configs]
...
1

la llave signingKey de donde la obtengo? te agradeceria

1
6360Puntos

justo acabo de terminar el curso y estoy viendo este gran aporte…

Gracias Hermano…

1
275Puntos

Al validar la configuración obtuve el error Bad configuration option: usekeychain, asi que ingresé nuevamente al archivo nano ~/.ssh/config y eliminé la línea UseKeychain yes. Luego de esto repetí las validaciones y el mensaje de exito que obtuve fue You've successfully authenticated, but GitHub does not provide shell access