Cómo generar una clave SSH en Windows

Abre PowerShell y ejecuta ssh-keygen -t ed25519 -C "you@laptop". Pulsa Enter para aceptar el archivo por defecto y escribe una frase de contraseña. La clave privada se guarda en C:\Users\you\.ssh\id_ed25519 y la clave pública en id_ed25519.pub, a su lado. En los servidores solo se pone el archivo .pub.

Actualizada el .

Generar la clave

ssh-keygen -t ed25519 -C "you@laptop"

Pulsa Enter para aceptar el archivo por defecto. Si ya existe una clave ahí, escribe otro nombre, como C:\Users\you\.ssh\id_ed25519_work, en vez de sobrescribirla. El comentario después de -C es solo una etiqueta, y lo ve cualquiera que vea la clave pública.

Si PowerShell dice que ssh-keygen no se reconoce, falta el cliente OpenSSH. Instálalo desde un PowerShell con privilegios elevados:

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

Hoy Ed25519 es la opción adecuada por defecto. Para las diferencias, consulta claves SSH RSA o ed25519.

Elegir una frase de contraseña

La frase de contraseña cifra el archivo de la clave privada, así que una copia del archivo no basta para usarla. Pon una salvo que la clave sea para un trabajo desatendido. Puedes cambiarla más tarde sin cambiar la clave:

ssh-keygen -p -f $env:USERPROFILE\.ssh\id_ed25519

Usar ssh-agent para escribirla una sola vez

El servicio del agente está desactivado por defecto. Actívalo una vez, en un PowerShell con privilegios elevados:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

Después, en un PowerShell normal, con tu propio usuario:

ssh-add $env:USERPROFILE\.ssh\id_ed25519
ssh-add -l

El segundo comando lista las claves cargadas. Si ssh-add dice que no puede conectar con el agente, el servicio no está en marcha: mira Could not open a connection to your authentication agent.

Si Git sigue pidiendo la frase de contraseña

Git para Windows puede usar su propio SSH incluido, que no llega al agente de Windows. La documentación de GitHub da esta solución:

git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"

Copiar la clave pública

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard

Ahora pégala donde la necesites: en GitHub, o en un servidor con el sustituto de ssh-copy-id para PowerShell.

Permisos de archivos

ssh rechaza una clave privada que otros usuarios pueden leer, con el mensaje UNPROTECTED PRIVATE KEY FILE. Las claves generadas en tu propia carpeta .ssh tienen los permisos correctos. El problema suele aparecer cuando se copia una clave de otro sitio. Mira la solución a ese error.

Copia de seguridad de la clave, o no

El archivo de la clave privada es la única copia. Si lo pierdes, creas una nueva y sustituyes la clave pública en cada servidor, lo que a menudo es más simple que mantener una copia de seguridad. Si guardas una, guárdala cifrada.

Una forma de hacerlo es un gestor de claves SSH con bóveda cifrada.

Preguntas

¿Dónde guarda ssh-keygen la clave en Windows?

En C:\Users\you\.ssh. id_ed25519 es la clave privada e id_ed25519.pub la pública. En los servidores y en GitHub solo va el archivo .pub.

¿Hace falta otro programa para crear una clave SSH en Windows?

No. Windows 10 y 11 incluyen el cliente OpenSSH, así que ssh-keygen funciona en PowerShell. Si falta, añade la funcionalidad OpenSSH.Client.

¿Cómo cambio la frase de contraseña más adelante?

Ejecuta ssh-keygen -p -f con la ruta de la clave privada. La clave sigue siendo la misma, así que en los servidores no cambia nada.

Fuentes

Más en SSH en cada sistema

Todas las guías