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.
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.