Para insertar (git push), extraer (git pull) y clonar (git clone) de forma segura entre un repositorio local de Git y un repositorio remoto de GitHub, debes crear un par de llaves SSH. Las llaves SSH funcionan como contraseñas, pero son una alternativa mucho más segura y en este tutorial, aprenderás qué son, cómo funcionan, cómo crearlas y cómo conectarlas a tu repositorio de GitHub.
¿Qué son las llaves SSH?
Las llaves SSH son una credencial de acceso que se utiliza en el protocolo SSH (Secure Shell). Con las llaves SSH se establece una comunicación segura y encriptada entre tu computadora y un servidor remoto; basado en el modelo cliente-servidor, el protocolo autenticará las dos partes: tu computadora y el servidor remoto y, cifrará los datos entre ellas.
Es así que, para autenticarte con las llaves SSH, primero debes crearlas y almacenarlas en tu computadora y, luego configurar el servidor remoto para que reconozca y acepte estas llaves.
¿Cómo funcionan?
Las llaves SSH se generan en pares, una llave pública (con extensión .pub) y una privada (sin extensión).
La llave pública se puede compartir libremente con cualquier servidor SSH al que desees conectarte, como por ejemplo GitHub.
La llave privada es secreta, se almacena en tu computadora de forma segura, generalmente en el directorio (~/.ssh) y no debes compartirla con nadie.
La relación entre la llave pública y la llave privada permite que la llave pública cifre mensajes que solo la llave privada podrá descifrar, a esto se le conoce como cifrado unidireccional.
Cuando intentes iniciar sesión, se compararán las llaves, la pública y la privada y si existe una coincidencia entre ambas, podrás acceder al servidor, sin necesidad de una contraseña.
Crea tus llaves SSH
Antes de comenzar a crear tus llaves, verifica si ya tienes unas creadas, para esto abre tu terminal y ejecuta el siguiente comando:
ls -al ~/.ssh
Aquí se listarán todos los archivos de tu directorio /.ssh.
⚠ Si recibes un error, indicándote que el directorio no existe, es porque no tienes unas llaves SSH. Si este es tu caso, puedes continuar al siguiente paso para crear las llaves en tu sistema operativo.
Comprueba si en el listado de archivos, encuentras uno con la extensión ".pub", si es así, puedes continuar usando estas llaves o crear unas nuevas.
Si aún no tienes unas llaves o quieres generar unas nuevas, sigue los pasos a continuación:
💡 Estos pasos aplican para todos los sistemas operativos.
1. Abre tu terminal, powershell o cmd y ejecuta el siguiente comando:
ssh-keygen -t ed25519 -C "your_emailexample.com"
⚠ Recuerda sustituir la información que está dentro de las comillas con el correo electrónico que usas para autenticarte en GitHub.
Tendrás una salida, como esta, que te preguntará dónde guardar la llave nueva, simplemente presiona Enter para aceptar la ubicación predeterminada.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519):
Luego, te pedirá que proporciones una frase de contraseña opcional, puedes crear una para hacer la contraseña aún más segura o puedes omitir este paso, presionando clic dos veces.
Enter passphrase (empty for no passphrase):
Obtendrás esta salida y de esta manera habrás creado tus llaves pública y privada y serán las que usarás para realizar tu autenticación.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/username/.ssh/id_ed25519.
Your public key has been saved in /Users/username/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:AsSrFB1DYlEBDSTwJWmPklfxKRtzQ0niw4PqZgEQ4y8 ejemplo@gmail.com
The key's randomart image is:
+--[ED25519 256]--+
|BoO@@=o. |
|o=+O==.. |
|.+o=X.= |
|+.= oX . |
|.E o. . S |
|. + . |
| + |
|o |
| |
+----[SHA256]-----+
2. Para ver tus llaves, ejecuta el siguiente comando:
ls -1 ~/.ssh/
Te listará los siguientes archivos:
id_ed25519
id_ed25519.pub
La llave con la extensión ".pub" es la pública y la que no tiene extensión, es la privada, es decir, la que nunca debes compartir con nadie.
3. Ahora tendrás que añadir tus llaves al agente SSH (SSH-Agent). Sigue los pasos a continuación para configurlas en tu sistema operativo.
💡El agente SSH, es un programa que permite guardar de forma segura tus llaves. El agente usará las llaves para iniciar sesión en GitHub sin que tengas que volver a escribir tu usuario y contraseña.
Linux o Windows
Si usas Linux o Windows, haz lo siguiente:
1. Abre tu terminal y ejecuta el siguiente comando para evaluar que está corriendo el servidor SSH
eval "$(ssh-agent -s)"
Y tendrás una salida parecida a esta. Esto nos indica que el servidor está corriendo, el número pid, puede ser diferente.
eval "$(ssh-agent -s)"
Agent pid 15122
2. Añade tu llave privada al SSH-Agent, ejecutando el comando:
ssh-add ~/.ssh/id_ed25519
¡De esta manera, has creado y añadido tus llaves correctamente!
Para Mac OS
Si usas una versión de macOS Sierra 10.12.2 o superior, deberás crear o modificar tu archivo “config”, sigue los pasos a continuación:
1. Confirma si el servidor SSH está corriendo ejecutando el comando:
eval "$(ssh-agent -s)"
Y tendrás una salida parecida a esta. Esto nos indica que el servidor está corriendo, el número pid, puede ser diferente.
eval "$(ssh-agent -s)"
Agent pid 15122
2. Ahora vas a configurar el archivo config, si no existe tendrás que crearlo. Comprueba si existe, ejecutando el comando:
ls -al
Obtendrás un listado de directorios y archivos, entre ellos busca el directorio .ssh
⚠ Si el directorio ~/.ssh no existe, puedes crearlo usando el siguiente comando
mkdir -p ~/.ssh
- Muévete al directorio con cd, así:
cd .ssh/
- Puedes listar los archivos para comprobar si existe el archivo config
ls -al
- Si el archivo config no existe, puedes crearlo usando el siguiente comando
touch ~/.ssh/config
- Abre el archivo ~/.ssh/config, puedes usar vim
vim ~/.ssh/config
- Copia y pega las siguientes líneas en el archivo:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
- Guarda y sal del archivo, presionando la tecla ESC, la tecla ":" (dos puntos) y las teclas w y q, quedaría así: :wq
3. Dirígete al home, ejecutando:
cd
4. Ejecuta el siguiente comando:
ssh-add ~/.ssh/id_ed25519
Y, esto es todo, ya has configurado tus llaves correctamente.
Añade tu llave pública a tu cuenta de GitHub
1 . Ejecuta el siguiente comando para copiar tu llave pública:
pbcopy < ~/.ssh/id_ed25519.pub
2. Ve a tu cuenta de GitHub, autentícate con tu usuario y contraseña, en la esquina superior derecha, da clic sobre tu foto de perfil, se te desplegará una lista, da clic sobre Settings (configuración).
3. Ahora, en la barra a la izquierda, ve hacía la sección Access (Acceso) y da clic en la opción SSH and GPG keys.
4. Haz clic sobre New SSH key
5. En el campo title (título), añade uno que describa tu llave, por ejemplo “Mac personal”
6. En el campo key, pega la llave que copiaste en el paso 1.
7. Por último, haz clic en ADD SSH key. (Añadir llave SSH)
8. GitHub te solicitará confirmar tu contraseña, añádela en el campo y haz clic en Confirm password (Confirmar contraseña)
Y, así es como conectas de forma segura Git a GitHub con llaves SSH.