Git y GitHub son herramientas esenciales para todo desarrollador. Se utilizan ampliamente en casi todo tipo de proyectos de desarrollo de software.

Existen otros servicios de alojamiento de Git como Gitlab y Bitbucket, pero GitHub es la opción más popular para los desarrolladores. Incluso puedes editar tu perfil para parecer más atractivo a los reclutadores.

Puedes utilizar Git y GitHub para organizar tus proyectos, colaborar con otros desarrolladores y, por supuesto, en Kinsta.

Pero como Git y GitHub son herramientas relacionadas pero diferentes, tienes que actualizar tu flujo de trabajo con cada una de ellas constantemente.

Te recomendamos que utilices claves SSH para cada una de tus máquinas. Así que, en este tutorial, aprenderás qué son, algunas de sus ventajas, y cómo generar y configurar las claves SSH de GitHub.

¡Empecemos!

¿Qué son las claves SSH?

En pocas palabras, las claves SSH son credenciales que se utilizan para que el protocolo SSH (Secure Shell) permite el acceso seguro a ordenadores remotos a través de Internet. Normalmente, esa autenticación se produce en un entorno de línea de comandos.

Este protocolo se basa en una arquitectura cliente-servidor, lo que significa que tú, como usuario (o «cliente»), tienes que utilizar un software especial, llamado cliente SSH, para entrar en un servidor remoto y ejecutar comandos. Esto es básicamente lo que haces cuando te autentificas a través de un terminal en GitHub.

Terminal showing two commands: "git commit -am "Added comment in the structured-programming example file" and "git push" with the success response from the GitHub server
Git push.

Pero SSH no sólo se utiliza para GitHub. Es ampliamente utilizado por otras plataformas como Kinsta, Google Cloud y los servicios web de Amazon para crear un canal seguro para acceder a sus servicios.

Ahora, entrando en cómo funcionan realmente las claves SSH, tienes que entender las diferencias entre las claves públicas y las privadas.

Claves públicas y privadas

Empecemos por lo básico.

El protocolo SSH utiliza una técnica de criptografía llamada encriptación asimétrica. Este término puede parecer complicado y extraño, pero nada más lejos de la realidad.

Básicamente, el cifrado asimétrico es un sistema que utiliza un par de claves, a saber, las claves pública y privada.

Como puedes adivinar, la clave pública se puede compartir con cualquiera. Su objetivo principal es cifrar los datos, convirtiendo el mensaje en un código secreto o texto cifrado. Esta clave suele enviarse a otros sistemas -por ejemplo, servidores- para cifrar los datos antes de enviarlos por Internet.

Por otro lado, la clave privada es la que debes guardar para ti. Se utiliza para descifrar los datos cifrados con tu clave pública. Sin ella, es imposible descifrar tu información encriptada.

Este método permite que tú y el servidor mantengáis un canal de comunicación seguro para transmitir la información.

Esto es lo que ocurre en segundo plano cuando te conectas a un servidor mediante SSH:

  1. El cliente envía la clave pública al servidor.
  2. El servidor pide al cliente que firme un mensaje aleatorio cifrado con la clave pública utilizando la clave privada.
  3. El cliente firma el mensaje y envía el resultado al servidor.
  4. Se establece una conexión segura entre el cliente y el servidor.

Es importante mantener tus claves privadas a salvo y no compartirlas con nadie bajo ninguna circunstancia. Son literalmente la clave de toda la información que se te envía.

Uso de claves SSH con GitHub

Desde el 13 de agosto de 2021, Github ya no acepta la autenticación por contraseña para el acceso a la línea de comandos. Esto significa que ahora tienes que autenticarte a través de un token de acceso personal o utilizar una clave SSH (un poco más conveniente).

Esto es lo que ocurre cuando intentas autenticarte con tu contraseña de GitHub a través de HTTP en un terminal:

Username for 'https://github.com': yourusername

Password for 'https://[email protected]':

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.

fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

GitHub necesita tu clave pública para autorizarte a editar cualquiera de tus repos vía SSH.

Veamos cómo puedes generar claves SSH localmente.

Cómo generar claves SSH localmente

Ahora que entiendes un poco el protocolo SSH y las diferencias entre las claves públicas y privadas, es el momento de configurar el canal SSH seguro entre tu máquina y tus repos de GitHub.

Antes de avanzar, ya deberías tener una cuenta de GitHub, y un terminal/símbolo de comandos con Git instalado en tu sistema. Si utilizas Windows, asegúrate de haber instalado Git bash, que tiene incorporadas todas las herramientas que necesitarás para seguir este tutorial.

El cliente OpenSSH es el software de código abierto más popular utilizado para conectarse a través de SSH. No tendrás que preocuparte por tu sistema operativo porque está instalado por defecto en Linux, macOS y Windows 10.

Para generar las claves locales de SSH es necesario iniciar una línea de comandos en Windows o un terminal en los sistemas basados en Unix.. Normalmente, puedes hacerlo buscando «terminal», «cmd» o «powershell» en tu panel de aplicaciones, y haciendo clic en el icono que aparece.

Application finder showing different terminal applications, including "Terminal Emulator", "Alacritty", and "Kitty".
Búsqueda de aplicaciones en el terminal.

Después de hacer esto, deberías tener una ventana similar a la siguiente imagen.

Semi-transparent terminal application running the fish shell.
Aplicación de terminal.

Ejecuta el siguiente comando para generar un par de claves SSH locales:

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

Es hora de contarte un secreto: ¡Nadie puede recordar este comando! La mayoría de los desarrolladores tienen que buscarlo en Google cada vez porque

  1. Es un comando muy largo, con números que se pueden olvidar fácilmente y que parecen aleatorios.
  2. Lo utilizamos poco, así que no merece la pena memorizarlo la mayoría de las veces.

Sin embargo, es importante entender cada comando que introducimos en nuestros terminales, así que vamos a ver qué significa cada parte de éste.

  • ssh-keygen: La herramienta de línea de comandos utilizada para crear un nuevo par de claves SSH. Puedes ver sus banderas con ssh-keygen help
  • t ed25519: La bandera -t se utiliza para indicar el algoritmo utilizado para crear la firma digital del par de claves. Si tu sistema lo soporta, ed25519 es el mejor algoritmo que puedes utilizar para crear pares de claves SSH.
  • -C «email»: La bandera -C se utiliza para proporcionar un comentario personalizado al final de la clave pública, que suele ser el correo electrónico o la identificación del creador del par de claves.

Después de escribir el comando en tu terminal, tendrás que introducir el archivo en el que quieres guardar las claves. Por defecto, se encuentra en tu directorio personal, en una carpeta oculta llamada «.ssh», pero puedes cambiarla por la que quieras.

A continuación, se te pedirá una frase de contraseña para añadir a tu par de claves. Esto añade una capa extra de seguridad si, en algún momento, tu dispositivo se ve comprometido. No es obligatorio añadir una frase de contraseña, pero siempre es recomendable.

Este es el aspecto de todo el proceso:

ssh-keygen command with various messages including the file the keys will be saved "/home/daniel/.ssh/kinsta_keys", passphrase input, and the resulting key fingerprint.
comando ssh-keygen.

Como puedes ver, este comando genera dos archivos en el directorio que hayas seleccionado (normalmente ~/.ssh): la clave pública con la extensión .pub, y la privada sin extensión.

Más adelante te mostraremos cómo añadir la clave pública a tu cuenta de GitHub.

Añadir la clave SSH a ssh-agent

El programa ssh-agent se ejecuta en segundo plano, guarda tus claves privadas y frases de acceso de forma segura, y las mantiene listas para ser utilizadas por ssh. Es una gran utilidad que te ahorra escribir tu frase de acceso cada vez que quieras conectarte a un servidor.

Por ello, vas a añadir tu nueva clave privada a este agente. A continuación te explicamos cómo hacerlo:

  1. Asegúrate de que ssh-agent se está ejecutando en segundo plano.
    eval `ssh-agent`
    # Agent pid 334065

    Si recibes un mensaje similar a este si todo está bien. Significa que el ssh-agent se está ejecutando bajo un id de proceso concreto (PID).

  2. Añade tu clave privada SSH (la que no tiene extensión) al ssh-agent.
    ssh-add ~/.ssh/kinsta_keys

    Sustituye kinsta_keys por el nombre de tu clave SSH. Si es la primera clave que creas, debe llamarse «id_algorithm_used», por ejemplo, id_ed25519.

Añadir la clave SSH a la cuenta de GitHub

El último paso es añadir tu clave pública a tu cuenta de GitHub. Sólo tienes que seguir estas instrucciones:

  1. Copia tu clave pública SSH en tu portapapeles. Puedes abrir el archivo donde se encuentra con un editor de texto y copiarla, o utilizar el terminal para mostrar su contenido.
    cat ~/.ssh/kinsta_keys.pub
    # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. Entra en GitHub ] y ve a la sección superior derecha de la página, haz clic en tu foto de perfil y selecciona Configuración.

    GitHub upper-right panel showing different sections with an arrow pointing to the Settings section.
    Configuración de GitHub.

  3. A continuación, en el perfil de tu configuración, haz clic en Claves SSH y GPG.

    Profile settings panel showing the SSH and GPG keys option.
    Claves SSH y GPG

  4. Haz clic en el botón Nueva clave SSH.

    SSH keys section with an arrow pointing to the New SSH key button.
    Botón de nueva clave SSH.

  5. Dale un título a tu nueva clave SSH en GitHub, normalmente el dispositivo desde el que vas a utilizar esa clave. Y luego pega la clave en el área de Claves.

    Add a new SSH key form with the fields "Title" and "Key".
    Añade un nuevo formulario de clave SSH

  6. Añade tu clave SSH.

    Add SSH key button.
    Botón de añadir clave SSH.

Prueba la conexión SSH con un Repo Push

Es el momento de probar todo lo que has hecho hasta ahora. Vas a cambiar, confirmar y empujar a uno de tus repositorios existentes utilizando SSH para asegurarte de que tu conexión está configurada correctamente.

Para nuestro ejemplo, modificaremos el sencillo sitio HTML que creamos en nuestro tutorial de Git para el desarrollo web.

Primero, necesitaremos clonar el repositorio en nuestra máquina local. Podemos ir a la página del repositorio en GitHub y copiar la dirección SSH que proporciona.

GitHub page showing SSH clone command.
Comando de clonación SSH

A continuación, clona el repo utilizando un terminal:

git clone [email protected]:DaniDiazTech/HTML-site.git

Ahora, vamos a añadir una simple etiqueta <h1> en el archivo index.html:

...
<div class="container my-2">
    <h1 class="text-center">A new title!<h1>
</div>

<div class="container my-3">
...
Simple HTML site with the title "A new title", and four pictures of tech items.
El sitio HTML simple.

No vamos a tocar nada de JavaScript o CSS para mantener esta edición sencilla. Pero si eres hábil con JavaScript, puede que encuentres un lugar en Kinsta. Comprueba las habilidades de codificación que necesitas para formar parte del equipo de Kinsta.

Después de hacer esto, confirma los cambios:

git commit -am "Added a simple title"

Y envíalos a GitHub como harías normalmente.

git push

Si todo ha ido bien, ¡felicidades! Acabas de establecer una conexión SSH entre tu máquina y GitHub.

Gestionar varias claves SSH para diferentes cuentas de GitHub

Si tienes varias cuentas de GitHub – digamos una para tus proyectos personales y otra para tu trabajo – es difícil utilizar SSH para ambas. Normalmente necesitarías máquinas separadas para autenticarte en diferentes cuentas de GitHub.

Pero esto puede resolverse fácilmente configurando el archivo de configuración de SSH.

Vamos a ello.

  1. Crea otro par de claves SSH y añádelas a tu otra cuenta de GitHub. Ten en cuenta el nombre del archivo al que vas a asignar la nueva clave.
    ssh-keygen -t ed25519 -C "[email protected]"
  2. Crea el archivo de configuración SSH. El archivo de configuración indica al programa ssh cómo debe comportarse. Por defecto, el archivo config puede no existir, así que créalo dentro de la carpeta .ssh/:
    touch ~/.ssh/config
  3. Modifica el archivo config de SSH. Abre el archivo de configuración y pega el siguiente código:
    #Your day-to-day GitHub account
    
    Host github.com
      HostName github.com
      IdentityFile ~/.ssh/id_ed25519
      IdentitiesOnly yes
    
    # Work account
    Host github-work
      HostName github.com
      IdentityFile ~/.ssh/work_key_file
      IdentitiesOnly yes

Ahora, cada vez que necesites autenticarte por SSH utilizando tu cuenta de trabajo o secundaria, retocas un poco la dirección SSH del repo, de:

[email protected]:workaccount/project.git

…a:

git@github-work:workaccount/project.git

Resumen

Enhorabuena: ¡has aprendido la mayor parte de los conocimientos prácticos que necesitas para conectarte a GitHub mediante SSH!

Este tutorial ha tratado la necesidad del protocolo SSH, las diferencias entre las claves públicas y privadas, cómo generar claves, añadirlas a GitHub e incluso gestionar múltiples claves SSH para diferentes cuentas de GitHub. Ten en cuenta que, a menos que quieras perder el acceso a todo, tu clave privada tiene que seguir siendo eso: privada.

Con estos conocimientos, ahora estás preparado para desarrollar un flujo de trabajo impecable con Git y GitHub. ¡Sigue codificando!

Daniel Diaz

Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech