Entre las tareas más repetitivas que nos podemos encontrar hoy en día en el flujo de desarrollo de cualquier proyecto que utiliza Git, particularmente si utilizamos la línea de comando en vez de alguna GUI que haga todo el trabajo por nosotros, es la de escribir manualmente nuestro usuario y contraseña cada vez que vamos a realizar alguna operación sobre dicho repositorio.

Una de las maneras más elegantes y seguras de solventar este paso tedioso es la de configurar una llave SSH que sirva como autenticación con el servidor que aloja nuestro repositorio. En este caso puntual estamos trabajando en un entorno Linux (Ubuntu 20.04 específicamente) y estamos configurando el acceso a un repositorio alojado en GitHub. Puede que la idea general sea similar para otros proveedores de Git en la nube pero algunos detalles pueden variar.

Generando una llave SSH

El primer paso es por supuesto generar una llave SSH en nuestra estación de trabajo o servidor, en donde sea que se encuentre la copia local que estará comunicándose con GitHub para enviar o recibir los últimos cambios a nuestro repositorio objetivo. Generamos una llave mediante la siguiente instrucción:

ssh-keygen -t rsa -b 4096 -C "[email protected]"
El output de nuestra consola será muy similar a esto...

Acá podemos indicar una ubicación distinta para la llave resultante y muy importante, una frase de seguridad para nuestra llave. Esta frase no es nuestra contraseña de GitHub, se trata de una clave adicional si lo deseamos pero debemos recordarla pues cada vez que intentemos comunicarnos con GitHub tendremos que ingresar dicha frase de seguridad. Es básicamente reemplazar una contraseña por otra.

Una vez generada nuestra llave notemos la ubicación donde fue generada. En mi caso fue en /home/sdelgado/.ssh/id_rsa.pub, por lo que ahora procedemos a GitHub y dentro del proyecto al que queremos asociar esta llave nos vamos a la sección Settings > Deploy keys.

En el título ponemos algún nombre que nos permita recordar fácilmente de qué acceso se trata y en llave ponemos el contenido de nuestro archivo recién generado en nuestra terminal / estación de trabajo / servidor.

Si vamos a hacer commits desde esta ubicación con esta llave, no olvidemos marcar el cuadro que nos da acceso de escritura al repositorio. Si solo vamos a leer commits podemos obviarlo y dejar el permiso como de sólo lectura.

Si todo va de acuerdo al plan veremos a continuación nuestra llave listada:

Finalmente regresamos a nuestra terminal y nos aseguramos que el agente SSH se encuentra ejecutando. Para ello utilizamos la instrucción eval $(ssh-agent -s) y debemos obtener un PID como respuesta:

Ya que hemos confirmado que ssh-agent se encuentra en ejecución agregamos la llave que recién registramos en GitHub a dicho agente:

ssh-add /home/sdelgado/.ssh/id_rsa

A partir de este punto cualquier operación utilizará nuestra llave y no volverá a preguntar por usuario y clave de GitHub. Una salvedad es que proyectos que hayan sido previamente clonados utilizando HTTP seguirán utilizando dicho método y por lo tanto seguirán solicitando usuario y clave. Para pasarnos a la autenticación mediante SSH con la llave que recién generamos es necesario clonar nuevamente el repositorio utilizando el método SSH de GitHub.