Usando múltiples cuentas en GitHub

Con la adopción de GitHub como servicio por parte de muchas empresas, es muy probable que nos toque algún proyecto en el cual no podamos usar nuestra cuenta personal.

Con esto se nos presenta un inconveniente: usar múltiples cuentas al mismo tiempo.

Para resolver este escenario, lo primero será crear un nuevo par de claves, sin perder las que ya estamos usando. Abrimos la consola y ejecutamos:

damian@linux:~$ ssh-keygen -t rsa -C "damian@ejemplo.com.ar"

A continuación veremos lo siguiente:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/damian/.ssh/id_rsa):

Acá es importante cambiar el nombre de la clave para evitar pisar las que ya tengamos en nuestro sistema.

Enter file in which to save the key (/home/damian/.ssh/id_rsa): /home/damian/.ssh/id_rsa_ejemplo

Luego seguimos con la generación como siempre.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/damian/.ssh/id_rsa_ejemplo.
Your public key has been saved in /home/damian/.ssh/id_rsa_ejemplo.pub.
The key fingerprint is:
cd:d0:3f:15:41:21:40:c6:e5:52:fe:53:74:f2:07:71 damian@ejemplo.com.ar
The key's randomart image is:
+--[ RSA 2048]----+
|           .=+O+E|
|         . . o.**|
|        . .   .+=|
|         + . ...+|
|        S o o  ..|
|             .   |
|                 |
|                 |
|                 |
+-----------------+

Hasta acá, ya tenemos nuestro segundo par de claves creado y no hemos perdido nada de lo que ya teníamos.

El siguiente paso es ingresar a nuestra nueva cuenta de GitHub y agregar la nueva clave.

Accedemos a las opciones de nuestra cuenta.

Configuración de cuenta en GitHub

Seleccionamos la opción SSH Keys.

Gestión de claves SSH en GitHub

Luego nos queda agregar la clave.

Agregar clave SSH en GitHub

Una vez guardada, ya tendremos nuestra clave asignada a nuestra cuenta.

El problema ahora es cómo indicar en nuestro equipo que en un caso vamos a usar nuestra cuenta personal y, en otro caso la cuenta que tenemos para un proyecto o para una empresa.

Para esto, necesitamos crear el archivo config (si es que no existiera) dentro del directorio .ssh. En este archivo vamos a indicar qué clave usar para un caso y cuál para otro.

Una vez creado, vamos a agregar el siguiente contenido.

#Default GitHub
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

#Ejemplo
Host github-ejemplo
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ejemplo

Veamos ahora qué hemos hecho.

En el primer caso, aquí llamado «Default GitHub», tenemos las directivas para nuestra cuenta personal. Lo que estamos indicando es que cuando git utilice el host github.com, aplique la clave ssh llamada id_rsa.

Ahora bien, en el segundo caso hemos duplicado el contenido pero con dos pequeños cambios que son los encargados de resolver nuestro problema. Por un lado, cambiamos el nombre del Host, por el otro, indicamos la clave ssh que debe utilizarse. El resto de los valores permanecen igual.

En cuanto a configuración, ya tenemos todos los pasos listos. Los últimos cambios los vamos a ver al momento de comenzar a trabajar con los repositorios.

Si trabajamos con nuestra cuenta personal, haríamos un clone de la siguiente forma:

git clone git@github.com:miusuario/repositorio.git carpeta_local

En cambio, cuando estemos utilizando nuestra segunda cuenta, vamos a cambiar el nombre del host.

git clone git@github-ejemplo:empresa/repositorio.git carpeta_local

El nombre el host en este caso coincide con lo que hemos indicado en el archivo config.

Como detalle final, deberíamos ajustar la configuración de los repositorios para que el usuario que se asocia al commit sea el correcto y no estemos mezclándolos.

Para esto, vamos a setear 3 variables locales del repositorio. Parados dentro del mismo ejecutamos:

git config user.name "Damián Culotta"
git config user.email "damian@ejemplo.com.ar"
git config github.user damian-ejemplo

De esta forma, en lugar de utilizarse los valores globales (que en mi caso sirven para mi cuenta personal), el repositorio usará las configuraciones específicas.

Si necesitáramos, por algún motivo, más cuentas, tendremos que repetir estos pasos.