SSHesunprotocolodecomunicaciónseguraque permite a los usuarios de una red conectar a un servidor remoto. Esto nos permite trabajar con repositorios remotos sin necesidad de usar usuario y contraseña cada vez que hagamos una acción.
GitHub ofrece una forma de configurar la conexión SSH. Para ello, debes iniciar sesión en tu cuenta de GitHub y acceder a la página de configuración de tu cuenta en https://github.com/settings/keys.
En la pantalla de configuración debemos ir a la sección de “SSH and GPG keys” y luego hacer click en “New SSH Key”
En la siguiente pantalla nos pedirá un título, que será idealmente el dispositivo o servidor que debe tener acceso a nuestra cuenta, y una llave SSH. Vamos a dejar esa ventana abierta y ya volveremos más adelante.
¡Venga! Vamos a lograr esa llave SSH.
Si usas GitHub Desktop, la aplicación de escritorio oficial de GitHub, puedes obviar toda la configuración de SSH. ¿Entonces por qué lo explicamos? Por dos razones: es interesante que sepas usar Git en el entorno original en el que está pensado, que es la terminal, y porque es importante conocer cómo funcionan las cosas por detrás para no pensar que es magia.
Cómo generar una llave SSH
Antes de generar una llave SSH, podemos revisar que no tengamos ya una generada previamente. Para ello podemos usarlspara ver todas las llaves SSH que tenemos en nuestra máquina.
# listamos las llaves SSH que ya tenemos
$ ls -al ~/.ssh
La localización/.sshsuele ser la carpeta donde se generan las llaves SSH pero puede ser diferente dependiendo del sistema operativo que estemos usando. Si no encuentras las llaves SSH o no tienes claro dónde están, no te preocupes, las generaremos.
Si no te aparece ningún fichero con extensión .pub … ¡no pasa nada! Ahora te enseño a generar una. Si te salen los ficheros, puedes saltar al paso“Usar una llave SSH”.
Para generar una llave SSH debes usar el comandossh-keygen. Te explico cómo
usarlo:
- Usaremos el algoritmoRSA, un algoritmo antiguo basado en la factorización de números primos, que es el que usa la mayoría de las llaves SSH. - También le indicamos el tamaño de la llave que queremos generar. En este caso decimos que sea de 4096 bits (que es lo recomendado para este algoritmo). - Y, finalmente, indicamos con el parámetro-Cun comentario que describa el uso de la llave.
Esto se traduce en la siguiente ejecución:
$ ssh-keygen -t rsa -b 4096 -C "tu.email@gmail.com"
> Generating public/private rsa key pair.
Después te preguntarádónde queremos guardar el fichero donde se guardará la llave. En este caso, lo guardaremos en el directorio que nos propone que, aunque puede variar en cada sistema operativo, suele ser el lugar correcto.
> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Pres
s enter]
Tras esto, te preguntará por unpassphrase. Esto no es más que tienes la posibilidad de añadir una frase de contraseña a la llave que generamos. Aunque la puedes dejar vacía, es recomendable que le pongas alguna contraseña a tu llave.
> Enter passphrase(empty for nopassphrase): [Typea passphrase]
> Enter samepassphrase again: [Typepassphrase again]
Después de esto, ya habrá generado la llave SSH y, para asegurarnos, podemos volver a ejecutar el comando que vimos anteriormente para listar las llaves SSH disponibles:
$ ls -al ~/.ssh
total 32 drwx------ 6 tu-usuario staff 192 17 oct 16 :12. drwxr-xr-x+ 77 tu-usuario staff 246417 oct 16 :13 .. -rw-r—r—@ 1 tu-usuario staff 159 30 jul 21 :06 config -rw------- 1 tu-usuario staff 411 12 ene 2021 id_ed25519 -rw-r—r— 1 tu-usuario staff 98 12 ene 2021 id_ed25519.pub -rw-r—r— 1 tu-usuario staff 377217 mar 2021 known_hosts
Usar una llave SSH
Ya tenemos la llave SSH. Ahora vamos a levantar elagentessh, un pequeño programa que queda latente en nuestra máquina y que se encarga de usar la llave SSH adecuada para las conexiones que realizamos.
CuandohablamosdellavesSSHesliteralmenteeso, unallave. Ahoraestamosgenerandoennuestra máquina la llave pero más tarde le diremos a GitHub que esta misma llave debe reconocerla como válida
Para ponerlo en marcha debemos ejecutar el siguiente comando:
$ eval" $( ssh-agent -s ) "
Ahora tenemos que añadir la llave SSH que hemos generado previamente. Para ello, debemos ejecutar el comandossh-add, de forma que le daremos al agente la ruta del fichero con la llave SSH que puede usar.
# En macOS se usa el parámetro -K
$ ssh-add -K ~/.ssh/id_rsa
# En Windows y Linux no se necesita
$ ssh-add ~/.ssh/id_rsa
¡Ya podemos conectarnos a GitHub! Vamos a ello.
Añadir clave SSH a tu cuenta de GitHub
Para que GitHub sepa que la llave SSH que hemos creado es válida… ¡se lo tenemos que decir de alguna forma! ¿Recuerdas la ventana que habíamos dejado abierta al inicio de la explicación? Bueno, si no, no te preocupes. Ve a esta URL: https://github.com/settings/keys
Y allí pulsa el botónNew SSH Key. En la nueva pantalla introduce como título el dispositivo en el que has creado la llave SSH. Por ejemplo, yo pondría“Mac Mini M1”. De esta forma siempre sabré que la llave que aparece es la de ese dispositivo en concreto.
Ahora nos falta añadir laKey, que será la llave que hemos creado previamente. ¿Cómo la recuperamos? Para ello, podemos ejecutar uno de los siguientes comandos para copiar la llave SSH en el portapapeles:
# en MacOS
pbcopy < ~/.ssh/id_rsa.pub
# en Windows
clip < ~/.ssh/id_rsa.pub
# en Linux
xclip -sel clip < ~/.ssh/id_rsa.pub
Ten en cuenta que/.ssh/id_rsa.pubes la ruta por defecto. Si has usado otra o, por alguna razón, tu sistema operativo guarda las llaves SSH en otro sitio, seguramente tendrás que adaptar el comando. Normalmente será un fichero.pub.
El contenido del portapapeles lo pegamos tal cuál en la caja de texto de las preferencias de GitHub y hacemos clic enAdd SSH Key.
No te preocupes que la llave que aparece no es válida… Ten en cuenta que este tipo de llaves tiene que ser privada y no debes compartirla de ninguna manera.
Probando, probando...
Ya lo tenemos todo listo. ¡Vamos a probar que todo funciona correctamente! Para ello, intentamos conectaros por SSH a GitHub.
$ ssh -T git@github.com
> La autenticidad del host 'github.com (DIRECCIÓN IP)'no se puede esta
blecer.
> La clave de huella digital RSA es SHA256:nThbg6kXUpJWGl7E1IGOCspRomTx
dCARLviKw6E5SY8.
> ¿Estás seguro de que quieres continuar conectado(sí/no)?
Pulsamos que sí y, si todo ha ido bien y hemos configurado correctamente la llave SSH, veremos que nos aparece el siguiente mensaje en la terminal.
Hi tu-usuario! You’ve successfully authenticated, but GitHub does not prov ** ide shell access.