¿Cansado de tener que tipear el usuario y contraseña cada vez que ejecutamos un push hacia GitHub? Este artículo explica cómo configurar la autenticación con clave pública por SSH para no tener que tipear nuestro usuario y clave nunca más.



Cada vez que hacemos push (subir nuestros commits al servidor remoto) hacia GitHub u otro (por ejemplo GitLab), necesitamos ingresar nuestro usuario y contraseña en el servidor:

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ git push origin master
Username for 'https://github.com': linuxitux
Password for 'https://linuxitux@github.com':

Después de un tiempo esto se vuelve tedioso. Pero, afortunadamente, GitHub permite autenticar con clave pública a través de SSH.

Para comenzar es necesario contar con un par de claves pública/privada DSA o RSA:

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ ll ~/.ssh/id_*
-rw------- 1 developer developer  668 Dec 21  2016 /home/developer/.ssh/id_dsa
-rw-r--r-- 1 developer developer  603 Dec 21  2016 /home/developer/.ssh/id_dsa.pub
-rw------- 1 developer developer 1679 Dec 21  2016 /home/developer/.ssh/id_rsa
-rw-r--r-- 1 developer developer  395 Dec 21  2016 /home/developer/.ssh/id_rsa.pub

Si no se cuenta con un par de ellas, es posible generarlas siguiendo las instrucciones del artículo Cómo autenticar con clave pública en SSH (ver el uso del comando ssh-keygen).

El siguiente paso consiste en configurar el cliente SSH para que, al conectarse contra el host "github.com", envíe el nombre de usuario "git" y utilice nuestra clave privada:

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ nano ~/.ssh/config

Agregar las siguientes líneas respetando la indentación:

Host github.com
  User git
  Hostname github.com
  IdentityFile ~/.ssh/id_dsa

El usuario SIEMPRE debe ser "git". No nuestro nombre de usuario en github.com.

Copiar el contenido de la clave pública correspondiente a la clave privada que hemos configurado en el archivo ~/.ssh/config (siempre es el mismo nombre de archivo pero con la extensión .pub):

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ cat ~/.ssh/id_dsa.pub 
ssh-dss XXXX developer@linuxito.com

Luego acceder a la configuración de nuestra cuenta de usuario en el servidor remoto. En el caso de GitHub, esto se hace desde la URL github.com/settings/keys:

  1. Desde el menú "SSH and GPG keys" presionar el botón "New SSH key".
  2. Poner un título y pegar el contenido de la clave PÚBLICA. ¡Cuidado! ¡no confundirse y pegar la clave privada (la que no tiene extensión)!
  3. Presionar el botón "Add SSH key".

Eso es todo, ahora es posible testear la conexión:

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ ssh -T git@github.com
Hi linuxitux! You've successfully authenticated, but GitHub does not provide shell access.

¡Excelente! Hemos autenticado contra GitHub sin necesidad de ingresar usuario ni contraseña. Claro está que GitHub no nos ofrece una shell en el host "github.com" :)

En caso de errores recurrir a la opción -v (verbose), ejecutando ssh -vT git@github.com. Esto ofrece información detallada acerca de cómo se produce el intento de conexión, qué clave utiliza, si hay problemas con ella, etc.

Por último es necesario cambiar la URL del remote (repositorio remoto) para que suba los cambios (push) a través de SSH en lugar de HTTPS.

La configuración inicial del remote es la siguiente:

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ git remote -v
origin  https://github.com/linuxitux/La-Biblia-del-SysAdmin.git (fetch)
origin  https://github.com/linuxitux/La-Biblia-del-SysAdmin.git (push)

Para cambiar la URL de un repositorio git se debe recurrir al comando set-url:

Simplemente cambiar "https://" por "git@":

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ git remote set-url origin git@github.com:linuxitux/La-Biblia-del-SysAdmin.git

Ahora queda así:

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ git remote -v
origin  git@github.com:linuxitux/La-Biblia-del-SysAdmin.git (fetch)
origin  git@github.com:linuxitux/La-Biblia-del-SysAdmin.git (push)

¡Listo! A partir de este momento es posible hacer push sin necesidad de ingresar usuario y contraseña:

developer@linuxito.com:~/github/La-Biblia-del-SysAdmin$ git push origin master
Everything up-to-date

¡Qué alegría!

Cabe destacar que aplican todas las restricciones para permitir la autenticación con clave pública mediante SSH. Es decir, la clave privada (id_dsa) debe tener permisos octales 0400 (sólo lectura y sólo para el dueño) y el directorio ~/.ssh debe tener permisos 0700.

Referencias


Tal vez pueda interesarte


Compartí este artículo