Configuración de GitHub

Tutorial rápido de configuración de GitHub


Recuerda que git es un sistema de control de versiones para gestionar nuestros cambios en proyectos locales, es decir, en nuestro sistema o equipo. Sin embargo, git puede conectar con repositorios remotos como por ejemplo GitHub, GitLab o BitBucket, entre otros.

En este tutorial, vamos a ver como hacerlo, de forma sencilla y entendible, utilizando GitHub.

Registrarse en GitHub

El primer paso, será registrarse en GitHub y crearse una cuenta. Una vez hecho, recuerda volver a revisar el tutorial de configuración de git y asegurarte que el nombre de usuario e email local coinciden con los indicados en GitHub.

Puedes revisarlos y confirmar los que tienes con el siguiente comando:

$ git config --global --list

user.name=Usuario
user.email=[email protected]

Si no coinciden, sería conveniente cambiarlos según las instrucciones del tutorial anterior.

Descargar repositorios

En el artículo anterior, vimos una forma sencilla de descargar repositorios utilizando una URL vía HTTPS:

$ git clone https://github.com/ManzDev/gallinerica

Sin embargo, es mucho más interesante y apropiado hacerlo utilizando una key protegida vía SSH, por lo que en lugar del comando anterior, sería conveniente utilizar el siguiente:

$ git clone [email protected]:ManzDev/gallinerica.git

Cloning into 'gallinerica'...
The authenticity of host 'github.com (140.82.121.3)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,140.82.121.4' (ECDSA) to the list of known hosts.
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

¡Wow! Mucha información. Analicemos poco a poco toda esta información que nos llega al hacer la operación, para entender bien que está ocurriendo. Sin embargo, si tienes mucha prisa y no quieres pararte a pensar, puedes saltar directamente a la sección Generar una clave SSH.

Autenticidad de GitHub

Las dos primeras lineas del mensaje de respuesta anterior nos muestran lo siguiente:

The authenticity of host 'github.com (140.82.121.3)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.

La primera línea nos dice que se puede garantizar la autenticidad de github.com, ya que es la primera vez que accede a esta web. La segunda línea, nos devuelve cuál es la «huella digital» de esta página para que nos aseguremos si es quien dice ser.

Si somos paranoicos con la seguridad, podemos acceder a GitHub SSH key fingerprints, donde efectivamente comprobaremos que en su propia web mencionan esta huella digital y debe coincidir.

En la siguiente línea, nos pregunta si estamos seguros de conectar con GitHub. Respondemos que sí:

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,140.82.121.4' (ECDSA) to the list of known hosts.

Entonces, nos mostrará que se ha añadido github.com a la lista de sitios conocidos, por lo que la próxima vez no nos saldrá el mensaje de error y sólo nos volverá a salir esta alerta si intentamos acceder a un GitHub que no es el mismo GitHub que hemos «conocido» ahora.

Sin embargo, el resto del mensaje no parece muy amistoso:

[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

Nos indica que no tenemos permiso, porque no tenemos una key SSH aún configurada.

Generar una clave SSH

Para poder realizar operaciones con GitHub de forma segura y poder identificarnos como usuario, necesitaremos generar una key SSH para que GitHub sepa que somos nosotros. Para ello, vamos a realizar la siguiente operación, modificando el correo por nuestro correo en cuestión:

$ ssh-keygen -t ed25519 -C "[email protected]"

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/usuario/.ssh/id_ed25519):
Created directory '/home/usuario/.ssh'.

Esto generará dos ficheros en la ruta /home/usuario/.ssh:

  • 🔑 id_ed25519 (la clave privada): Este fichero contiene información que sólo nosotros deberíamos tener, y que no deberíamos enviar a ninguna página ni a nadie. Servirá para identificarnos. Es la llave.
  • 🔐 id_ed25519.pub (la clave pública): Este fichero contiene información pública. Servirá para contrastar con la llave anterior. Es el candado.

Una vez terminado este proceso, nos aparecerá lo siguiente:

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

En este caso, nos pregunta una frase de password, por si queremos reforzar la seguridad de la key SSH. Si no queremos, podemos dejarla vacía.

Una vez realizado este proceso, veremos que nos confirma la creación de los dos ficheros anteriores, junto a una huella digital y un randomart image:

Your identification has been saved in /home/usuario/.ssh/id_ed25519
Your public key has been saved in /home/usuario/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:##################################### [email protected]
The key's randomart image is:
+--[ED25519 256]--+
|..o              |
|.+               |
| .E              |
|.. .     +o o    |
| .+.    =+=+     |
| .... o.*+o*     |
|      oo.o+oo.   |
|       o=+.oo+   |
|     .o.+o==B++  |
+----[SHA256]-----+

Una vez llegado a este punto, lo que necesitamos es subir la 🔐 key pública a GitHub, para poder identificarnos en él con nuestra 🔑 key privada.

Creación de una key SSH

Ahora, lo único que debemos hacer, es acceder a Add new SSH Key, donde se nos va a pedir varios datos:

  • Title: Simplemente, un título a nivel informativo para recordar de que key se trata.
  • Key type: Dejamos la opción Authentication Key marcada.
  • Key: En este campo debemos pegar el contenido del fichero de nuestra 🔐 clave pública.

Para obtener el contenido de la 🔐 clave pública, escribimos el siguiente comando:

$ cat /home/usuario/.ssh/id_ed25519.pub

ssh-ed25519 ####################################### [email protected]

Nos mostrará un texto que comienza por ssh-ed25519 y acaba con nuestro correo. Lo copiamos, y lo pegamos en el área de texto anterior, guardando los cambios y añadiendo la key. Una vez hecho esto, sólo tenemos que volver a intentar hacer el clonado del repositorio, para comprobar que ahora todo lo hará correctamente, y sin problemas.

Añadir la key al Agente SSH

Sin embargo, te habrás dado cuenta que si hemos elegido establecer una passphrase (frase de password), para tener una comunicación más segura, cada vez que hagamos cambios nos preguntará la contraseña, lo que es algo tedioso.

Existe ssh-agent, un sistema que se encarga de manejar claves SSH para que sea más sencillo utilizarlas. Vamos a configurarlo utilizando el comando ssh-add e indicándole la 🔑 clave privada a añadir:

$ ssh-add ~/.ssh/id_ed25519

Could not open a connection to your authentication agent.

Observa que si te devuelve este mensaje es porque no ha podido contactar con el agente para añadir la clave. Esto ocurre porque no está activo y por lo tanto, no puede comunicarse con él. Para solucionarlo, escribimos lo siguiente:

$ eval "$(ssh-agent -s)"

Agent pid 3093

Esto abrirá el agente y, ahora sí, nos permitirá añadir la clave privada para que la tenga en cuenta a la hora de trabajar y comunicarnos con GitHub. Ejecutamos nuevamente el comando ssh-add, indicando la ruta de la 🔑 clave privada:

$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/usuario/.ssh/id_ed25519:
Identity added: /home/usuario/.ssh/id_ed25519 ([email protected])

Ahora sí, el mensaje Identity added nos confirma que se ha añadido la clave privada y la tendrá en cuenta a la hora de realizar una conexión o comunicación. Finalmente, si volvemos a intentar clonar el repositorio veremos que podemos hacerlo sin indicarle la clave manualmente:

$ git clone [email protected]:ManzDev/gallinerica.git

Cloning into 'gallinerica'...
remote: Enumerating objects: 364, done.
remote: Counting objects: 100% (364/364), done.
remote: Compressing objects: 100% (303/303), done.
remote: Total 364 (delta 141), reused 281 (delta 58), pack-reused 0
Receiving objects: 100% (364/364), 4.33 MiB | 5.40 MiB/s, done.
Resolving deltas: 100% (141/141), done.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev