Autentifica con múltiples cuentas en GitHub sin contraseña

Lun 12 Oct 2020 | Por: Roylan Suarez

Hola a todos los amigos de CodigoJS. Hoy quiero compartir con vosotros un tip muy interesante para los que trabajamos con múltiples repositorios en GitHub.

Si trabajas con varios proyectos en GitHub, puede ser un poco tedioso tener que estár escribiendo constantemente usuario y contraseña de cada repositorio. Afortunadamente GitHub nos permite configurar cada repositorio para no tener que estár autentfiicando con cada cambios que realizamos.

Para este caso vamos a configurar dos cuentas, una personal, que no estará asociada a ningún repositorio y una segunda que estará asociada a un repositorio específico.

Tabla de contenidos


Generar claves ssh para autenticar contra GitHub

Antes de continuar, lo primero que debemos hacer es comprobar si tenemos alguna clave SSH creada con el siguiente comando:

$ ls -al ~/.ssh

Este comando mostrará todas las claves públicas y privadas que tengamos generadas

-rw-------  1 roy roy 1679 mar 25  2020 id_rsa
-rw-r--r--  1 roy roy  401 mar 25  2020 id_rsa.pub

Si obtenemos un resultado como el anterior quiere decir que ya tenemos una par de claves públicas y privadas, sino, las creamos con el siguiente comando:

$ ssh-keygen -t rsa

el cual nos hará las siguientes preguntas

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

aquí presionamos enter para dejar el valor por defecto

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Seguido nos preguntará por una frase de seguridad (como una contraseña), la cual podemos crear para mayor seguridad, pero como queremos autentificar sin contraseña presionamos la tecla enter para dejarla en blanco las dos veces.

Finalmente se crearán las claves públicas y privadas en la ruta elegida anteriormente.

Your identification has been saved in /home/roy/.ssh/id_rsa.
Your public key has been saved in /home/roy/.ssh/id_rsa.pub.

Este par de claves creadas las podemos utilizar para autentificar de forma general con algún servicio personal.

Ahora toca crear una segunda clave para autentificar con una cuenta específica que tengamos en en GitHub. Vamos a ejecutar el comando anterior pero con otros parámetros:

ssh-keygen -t rsa  -f "/home/roy/.ssh/id_rsa_codigojs"

Aquí hemos añadido el parametro -f para especificar la ruta y el nombre del par de claves que necesitamos genear para autentificar con el repositorio de GitHub. El Resultado será como el anterior. Si queremos comprobarlas hacemos un ls -la ~/.ssh/

-rw-------  1 roy roy 1679 oct 11 23:15 id_rsa
-rw-r--r--  1 roy roy  390 oct 11 23:15 id_rsa.pub
-rw-------  1 roy roy 1679 oct 11 10:47 id_rsa_codigojs
-rw-r--r--  1 roy roy  390 oct 11 10:47 id_rsa_codigojs.pub

Configurar GitHub para permitir la autenticación

Listo, ya tenemos nuestras claves creadas, ahora nos vamos a nuestro repositorio de GitHub donde queremos autentificar sin contraseña para copiar nuestra clave pública.

Hacemos clic en Settings, en el menú verticar que aparece hacemos clic en Deploy Keys, y por último en el botón Add deploy key, hasta llegar a esta pantalla.

Configurar GitHub para autenticar sin contraseña

Antes de continuar, nos vamos a la consola de nuestro ordenador y copiamos la clave pública que vamos a utilizar para autentificar contra este respositorio:

less ~/.ssh/id_rsa_codigojs.pub 

Copiamos todo el contenido mostrado en la consola y volvemos a GitHub.

Donde dice Title escribimos un nombre para identificar nuestra clave, por ejemplo Public Key Roy. Y en el cuadro de texto Key pegamos la clave pública copiada en la consola.

Por último, marcamos el checkbox que dice Allow write access para que GitHub nos permita hacer push, de lo contrario será un repositorio de solo lectura, es decir para hacer pull.

Listo, ahora presionamos el botón Add key para guardar los cambios.

IMPORTANTE: Recuerda siempre copiar la clave que termina en .pub

Registrando las nuevas claves SSH con ssh-agent

Para usar las claves, tenemos que registrarlas con el ssh-agent en nuestra máquina. Asegurate de que ssh-agent se esté ejecutando con el comando eval '$ (ssh-agent -s)'.

Agregue las claves al ssh-agent así:

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_codigojs

Haga que el ssh-agent use las respectivas claves SSH para los diferentes hosts SSH.

Para saber cuales claves tiene en cache ssh-agent pordemos ejecutar el siguiente comando:

ssh-add -l

Casa ves que reiniciemos nuestra computadora debemos comprobar las claves que tenemos en el ssh-agent y cargar las que necesitemos. Lo más recomendable es tener en cache del ssh-agent solamente la clave que estemos utilizando.

Si necesitamos eliminar todas las claves de la cache del ssh-agent lo podemos hacer con el siguiente comando:

ssh-add -D

Crear el archivo de configuración de SSH

El paso siguiente es editar el archivo de configuración ~/.ssh/config para que nos permita autententificar con diferentes hosts. Si el archivo no exite, entonces lo creamos. Nos vamos a la consola y ejecutamos el siguiente comando:

nano ~/.ssh/config 

y le añadimos el siguiente contenido:

# Personal account, - the default config
Host github.com
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa

# CodigoJS project
Host github.com-codigojs
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_codigojs_rsa

Hemos creado dos entradas diferentes, la primera corresponde a nuestra cuenta personal que no está asociada a ningún repositorio de Github. Por lo tanto vamos a centrarnos en la segunda entrada.

  • Host github.com-codigojs: Con esta opción estamos estableciendo el servidor contra el cual vamos hacer la autentificación. "github.com-codigojs" es una notación para diferenciar múltiples cuentas de github
  • Hostname: La url del servidor de GitHub.
  • User: siempre será git porque es el usuario que establece github.
  • IdentifyFile: La ruta de nuestra clave privada para autentificar con la clave pública en el servidor de github.

Configurar la url remota para el repositorio local

Ahora necesitamos configurar nuestro repositorio local para autenticar con github. Primero comprobamos la url de nuestro repositorio local:

git remote -v
origin  git@github.com:roy/codigojs.git (fetch)
origin  git@github.com:roy/codigojs.git (push)

A continuación vamos a configurar nuestro repositorio local para que utilice la entrada "Host github.com-codigojs" que creamos en el archivo ~/.ssh/config con el siguiente comando:

git remote set-url origin git@github.com-codogojs:roy/codigojs.git

Aquí lo más importante es que tenemos que hacer coincidir la url @github.com-codigojs con la sección que creamos en el archivo de configuración ~/.ssh/config

De esta forma, cada vez que hagamos un pull/push de nuestro repositorio local git utilizará la clave privada de la configuración que hemos declarado en el archivo config de SSH para autentificar con el repositorio remoto de github sin necesidad de establecer usuario y contraseña.

Si queremos comprobar que la url remota se actualizó correctamente hacemos nuevamente un git remote -v y podemos comprobar que la url está de la forma que esperamos.

Bueno, hasta aquí llegamos, espero que esta guía os sea de utilidad para mejorar la productividad con multiples cuentas de GitHub.

Si tienes alguna duda puedes dejarnos tus comentarios.

 


Déjanos un comentario