Configurar llave SSH en GitHub desde Windows

Jordi Ayala - Nov 3 '22 - - Dev Community

Al trabajar con repositorios de manera local y remota utilizando GitHub, habitualmente cuando insertamos cambios (git push), obtenemos nuevos cambios (git pull) o simplemente al clonar (git clone) un repositorio, se realiza a través de internet y el protocolo HTTPS.

Existe un protocolo más seguro a través del cual podemos establecer una vía de comunicación más segura con GitHub para cualquier operación, se trata de SSH.

En este tutorial se describe el proceso para crear y configurar una llave SSH con GitHub desde Windows utilizando la herramienta de OpenSSH.

¿Qué es SSH?

SSH o Secure Shell, es un protocolo de administración remota que permite a los usuarios controlar y modificar sus servidores remotos a través de Internet a través de un mecanismo de autenticación. Es un protocolo de capa de aplicación que se ejecuta sobre TCP/IP.

¿Qué es una llave SSH?

Una llave SSH es un par de llaves que se utilizan para cifrar y descifrar información. La llave pública (extensión .pub) se utiliza para cifrar la información y la llave privada (sin extensión) para descifrarla.

OpenSSH

OpenSSH es una herramienta de conectividad para el inicio de sesión remoto que usa el protocolo SSH. De esta manera, todo el tráfico de red se cifra y se puede iniciar sesión en un servidor remoto de forma segura.

Instalar OpenSSH

Para realizar la instalación de OpenSSH ejecutar PowerShell como administrador. Para verificar si ya está instalado, ejecutar el siguiente comando:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Enter fullscreen mode Exit fullscreen mode

Este comando devuelve como salida si ya se encuentran instalados o no, tanto el cliente como el servidor de OpenSSH.

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
Enter fullscreen mode Exit fullscreen mode

A continuación, es necesario instalar los componentes del servidor o cliente necesarios, basta con ejecutar el comando que corresponda.

# Instalar OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# Instalar OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Enter fullscreen mode Exit fullscreen mode

Una vez ejecutados los comandos, ambos deben devolver la siguiente salida.

Path          :
Online        : True
RestartNeeded : False
Enter fullscreen mode Exit fullscreen mode

Configurar OpenSSH

Para configurar el servidor de OpenSSH por primera vez, abrir PowerShell como administrador y ejecutar los siguientes comandos.

# Iniciar el servicio de sshd
Start-Service sshd
Enter fullscreen mode Exit fullscreen mode
# Opcional, pero recomendado:
Set-Service -Name sshd -StartupType 'Automatic'
Enter fullscreen mode Exit fullscreen mode
# Configurar el firewall para permitir conexiones SSH
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
Enter fullscreen mode Exit fullscreen mode

Ejecutar el siguiente comando para definir el servicio de OpenSSH con arranque automático, es decir, se iniciará junto con el sistema sin la necesidad de ejecutar ningún comando.

Get-Service ssh-agent | Set-Service -StartupType Automatic
Enter fullscreen mode Exit fullscreen mode

En caso contrario, con el siguiente comando se puede iniciar el servicio de OpenSSH.

Start-Service ssh-agent
Enter fullscreen mode Exit fullscreen mode

Para ver el estado actual del servicio ejecutar el siguiente comando.

Get-Service ssh-agent
Enter fullscreen mode Exit fullscreen mode

Para más información sobre el servicio de OpenSSH, se puede consultar la documentación oficial de Microsoft en Instalación de OpenSSH.

Crear llave SSH

Antes de generar una nueva clave SSH, verificar si hay claves existentes en la máquina local. Para ello dirigirse a la ruta C:\Users\user\.ssh y verificar si ya existe un archivo con extensión .pub.

En caso de no existir, abrir la terminal de Windows o PowerShell y ejecutar el siguiente comando para generar una nueva llave SSH. Solo es necesario sustituir el correo electrónico por el que se utiliza en GitHub.

ssh-keygen -t ed25519 -C "email@dominio.com"
Enter fullscreen mode Exit fullscreen mode

A continuación es necesario definir donde se almacenará la llave, en este caso se utilizará la ruta por defecto, solo es necesario presionar la tecla Enter.

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_ed25519):
Enter fullscreen mode Exit fullscreen mode

En seguida, se debe definir una frase de contraseña para la llave, es opcional, pero brinda mayor seguridad el utilizarla.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Enter fullscreen mode Exit fullscreen mode

Se obtiene una salida similar a la siguiente. Lo cual indica que la llave se ha generado correctamente.

Your identification has been saved in C:\Users\user/.ssh/key-github
Your public key has been saved in C:\Users\user/.ssh/key-github.pub
The key fingerprint is:
SHA256:/T9DlP7QXZs5I7j+QnjZMs+CxI65zz5bI4P09n1O2nw ejemplo@asjordi.dev
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|               . |
|         .    o .|
|       .S o +o .*|
|      . o+ O o+*o|
|       .==+oB..+o|
|       oo+=+o+B.E|
|       .+=+o+++*.|
+----[SHA256]-----+
Enter fullscreen mode Exit fullscreen mode

Para ver las llaves que se han creado, posicionarse en la ruta C:\Users\user\.ssh y ejecutar el siguiente comando.

ls
Enter fullscreen mode Exit fullscreen mode

Se obtiene una salida similar a la siguiente.

id_ed25519
id_ed25519.pub
Enter fullscreen mode Exit fullscreen mode

La llave con extensión .pub es la llave pública y la que no tiene extensión es la llave privada.

Agregar llave SSH a OpenSSH

Una vez creadas las llaves SSH, es necesario agregarlas al agente SSH, en este caso OpenSSH. Para ello, ejecutar el siguiente comando. Recordando que se debe estar posicionado en la ruta donde se almacenan las llaves, o bien, se puede especificar la ruta completa.

ssh-add .\id_ed25519
Enter fullscreen mode Exit fullscreen mode

Agregar llave SSH a GitHub

  • Para agregar las llaves SSH a GitHub, es necesario copiar el contenido de la llave pública, para ello, ejecutar cualquiera de los siguientes dos comandos, y copiar el contenido que se muestra en pantalla.
Get-Content .\id_ed25519.pub
cat .\id_ed25519.pub
Enter fullscreen mode Exit fullscreen mode
  • Ingresar a GitHub y dirigirse a la sección de configuración de la cuenta.

  • En el panel izquierdo, seleccionar la opción SSH and GPG keys.

  • Hacer clic sobre el botón New SSH key.

  • En el campo Title, colocar un nombre que identifique la llave SSH.

  • En el campo Key, pegar el contenido de la llave pública que se copió anteriormente.

  • Hacer clic sobre el botón Add SSH key para agregar la llave SSH a GitHub.

  • Confirmar la contraseña de GitHub y listo.

De esta forma, se ha agregado la llave SSH a GitHub. En caso de querer agregar una nueva llave SSH, se debe repetir el proceso anterior, saltando los pasos de configuración de OpenSSH.

Para más información sobre la configuración de llaves SSH en GitHub, se puede consultar la documentación oficial de GitHub en Conectar a GitHub con SSH.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .