MULTIPLES LLAVES SSH PARA DIFERENTES CUENTAS EN GITHUB
Tags: ssh, github, terminal, security
Published: 2023-10-22 05:35:03

Me ha tocado que, en algunas empresas para compartir el código, en lugar de compartir por medio de permisos del repositorio comparten las credenciales de una cuenta en Github. Si bien es cierto no es la mejor manera de compartir el código, pero ellos ya tienen un flujo de trabajo preestablecido.

La forma más segura de compartir información entre Github y un ambiente de desarrollo es mediante llaves [SSH](https://www.atlassian.com/es/git/tutorials/git-ssh); sin embargo, si también estas trabajando en proyectos personales ya sea un emprendimiento o simplemente estas creando proyectos para aprender y conectas tu cuenta personal de la misma manera, Github te indicará que no puedes agregar una llave ssh dos veces, por lo tanto, tendrás que crear dos diferentes claves, una para cada cuenta. Pero: **¿Como creamos esas llaves y las relacionamos con las cuentas de Github?**

---
## Tabla de Contenido
- [Generación de llaves](#chapter-1)
- [Agregar llaves a Github](#chapter-2)
- [Relacionar llaves con Github](#chapter-3)
- [Clonar repositorios](#chapter-4)

---



## Generación de llaves <a name="chapter-1"></a>
Lo primero que debemos hacer es posicionarnos en la carpeta `.ssh`, regularmente en todos los sistemas operativos está ubicada en el _home_ del usuario.

Luego debemos crear una llave ssh, una forma fácil de hacerlo es ejecutar el siguiente comando:

```
ssh-keygen
```

Al momento de ejecutar el comando nos va a preguntar en cual archivo queremos guardar la clave, para este ejemplo podemos ponerle `personal_github` para la llave de nuestra cuenta personal. Luego nos va a preguntar si queremos ponerle una frase (o contraseña 😂) a nuestra llave, yo siempre recomiendo ponerla para mayor seguridad.

Listo, ya tenemos nuestra primera llave.

Después repetimos los mismos pasos para generar nuestra segunda llave, solo que ahora cuando nos vuelva a solicitar el nombre para la llave podemos poner `work_github` simulando la llave para nuestra cuenta de trabajo. 

Si se crearon las llaves correctamente debes tener cuatro archivos de la siguiente manera:

```
personal_github
personal_github.pub

work_github
work_github.pub
```

## Agregar llaves a Github <a name="chapter-2"></a>

Ahora en la sección de _Llaves SSH y GPG_ en la configuración de Github debemos agregar las llaves de los archivos con extensión `.pub`, para ver el contenido de estos archivos podemos ejecutar el comando:

```
cat personal_github.pub

//además para la cuenta work deberíamos ejecutar

cat work_github.pub
```

## Relacionar llaves con Github <a name="chapter-3"></a>

Cuando ya tengamos agregadas las llaves públicas a las respectivas cuentas de Github y tratamos de clonar un repositorio de esas cuentas nos informará del siguiente error:


![Error Github](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ihf91o7jgaq19tdc1cx.png)

Este error es debido a que ya hemos creado las llaves, pero aún nos hace falta relacionarlas en nuestro ambiente. Vamos a ubicarnos en nuestra consola a la carpeta `.ssh` que está ubicada en el _home_ de nuestro usuario del sistema operativo, como ejemplo podemos usar el siguiente comando:

```
cd ~/.ssh
```

Cuando ya estemos en la carpeta debemos crear un archivo sin extensión llamado `config`. Dependiendo del sistema operativo así también va a depender el comando para crear el archivo, por ejemplo, en Linux puede ser:

```
touch config
```


En Windows Powershell sería:

```
New-Item config
```

Ahora debemos editar ese archivo, puedes hacerlo con tu editor de texto favorito. Yo lo editaré con VSCode por lo que voy a ejecutar el comando:

```
code touch
```

Debemos colocar las siguientes configuraciones:

```
# Personal GitHub account
 Host personal.github.com
 HostName github.com
 IdentityFile ~/.ssh/personal_github
# Work GitHub account
 Host work.github.com
 HostName github.com
 IdentityFile ~/.ssh/work_github

```

Acá estamos indicado el host al que pertenece la llave, el nombre de ese host y también donde está ubicada la llave correspondiente a cada host.

## Clonar repositorios <a name="chapter-4"></a>

Ahora para clonar los repositorios debemos modificar el comando de git, antes hacíamos:

```
git clone git@github.com:garcodas/example_bot.git
```

Modificado sería:

```
git clone git@personal.github.com:garcodas/example_bot.git
```

Como nos damos cuenta en el host del url del repositorio debemos colocar el nombre del host que hicimos en el archivo `config` que creamos en la carpeta `.ssh`, como estoy clonando un repositorio de mi cuenta personal coloque `personal.github.com`, si quisiera clonar algo del host `work.github.com` debería hacer el mismo proceso.