¿Cómo conectar a GitHub utilizando diferentes archivos de identidad SSH?

Es muy común hoy en día el administrar diversas cuentas para poder atender a diferentes proyectos propios o de terceros. Conocer como configurar nuestros servicio de SSH para acceder a diversas llaves de manera amigable será una herramienta de ayuda para simplificar este proceso.

¿Cómo conectar a GitHub utilizando diferentes archivos de identidad SSH?
Photo by Brina Blum / Unsplash

Los archivos de identidad son parte del protocolo SSH que permite la administración segura de sistemas, transferencia de archivos y otras comunicaciones a través de Internet u otras redes inseguras.

SSH usa la autenticación de clave pública que depende de claves criptográficas para autenticar al servidor. Estas claves se almacenan en el directorio .ssh del usuario y son como contraseñas avanzadas que no pueden (no deberían) ser robadas en la red. Aunque en la práctica, muchas claves se usan para automatización y no requieren una frase de contraseña.

Si estás en ese punto donde trabajas para diversos clientes o proyectos y tienes que configurar diversas cuentas de GitHub para acceder a sus códigos fuentes, es muy seguro que ya estás en el punto en donde requieres de diferentes identidades SSH para acceder a estos sin afectar la seguridad.

Una de las formas en las que podemos lograr esto es actualizando tu archivo de configuración de SSH para que asocie el archivo de identificación con la cuenta que deseas utilizar.

Para esto procedemos a:

  1. Abrir el archivo de configuración del servicio de SSH con el editor de su preferencia. Utilizaré VIM para el siguiente ejemplo.
    vim ~/.ssh/config
  2. Añadimos el alias que deseamos colocar con la cuenta asociada a su archivo de identidad. Esto podemos hacerlo de la siguiente forma:
Host github.com-[alias]
    HostName github.com
    User git
    IdentityFile ~/.ssh/alias-id_rsa
~/.ssh/config (SSH Configuration file)

[alias] puede ser reemplazado con el nombre que deseas utilizar para asociar la cuenta, por ejemplo, el nombre del cliente. github.com-seisigma.

Guardamos nuestros cambios y cerramos el editor.

¿Cómo utilizamos esta configuración?

Para ilustrar el uso de esta configuración, nuestro alias tendrá el nombre de google, lo que nos daría el nombre del Host github.com-google. Nuestro archivo de identificación tendrá el nombre de google-id_rsa. Esto nos daría el siguiente archivo de configuración:

Host github.com-google
    HostName github.com
    User git
    IdentityFile ~/.ssh/google-id_rsa
~/.ssh/config (SSH Configuration file)

Para disponer de un contexto visual, esta sería la forma normal de clonar un repositorio sin utilizar un alias:

git clone git@github.com:user/repo.git

Esta sería la forma en la que podemos llamar a un mismo repositorio si necesitáramos utilizar un archivo de identificación de nombre google-id_rsa para completar la conexión:

git clone git@github.com-google:user/repo.git

¡Listo! con este pequeño cambio podemos acceder a nuestro repositorio de manera segura.

Extras

¿Por qué debería utilizar diferentes archivos de identidad en cada cuenta SSH?

Todo se resume en seguridad. Si por alguna razón nuestra llave privada cae en manos equivocadas, pondría en riesgo el acceso a todos los recursos que compartan la llave pública asociada.

Otro punto importante es simplificar el proceso de desvinculación de una llave y el recurso asociado. Esto solo será posible si la llave se asocia a un único recurso.

Fuentes consultadas: