Claves SSH en Windows: ed25519 con OpenSSH integrado

3 min
Hosting VPS/VDS

Un par de claves es mucho más seguro que una contraseña: la clave privada nunca sale de tu PC y los bots que escanean el puerto 22 no pueden adivinarla. Windows 10 y 11 ya incluyen OpenSSH, así que crearás una clave, la instalarás en tu VPS Linux Infrawire, la mantendrás cargada en el servicio ssh-agent de Windows y, por último, desactivarás el acceso por contraseña.

📋 Requisitos previos

  • Windows 10 u 11 con el cliente OpenSSH (compruébalo con ssh -V en PowerShell).
  • Un VPS Linux (Ubuntu 24.04, Debian 12, AlmaLinux 9 o Rocky 9) al que aún puedas entrar con contraseña: desde tu área de cliente encuentras la IP y la contraseña root del VPS.
  • Unos diez minutos y una segunda sesión SSH o la consola del VPS como red de seguridad.
PowerShell
ssh -V

🔐 Generar una clave ed25519

Abre PowerShell (normal, no de administrador) y ejecuta:

PowerShell
ssh-keygen -t ed25519 -C 'USER@my-pc'

Acepta la ruta por defecto C:\Users\USER\.ssh\id_ed25519 y escribe una frase de paso. Esta cifra la clave privada en el disco, así que un archivo robado resulta inútil. Se crean dos archivos: id_ed25519 (privado, no lo compartas nunca) e id_ed25519.pub (público).

📤 Copiar la clave pública al VPS

Windows no tiene ssh-copy-id, así que instala la clave a mano. Primero muestra la clave pública y copia la línea completa:

PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub

Inicia sesión con tu contraseña y añade esa línea en el servidor (sustituye el texto de ejemplo por tu clave real entre las comillas simples):

Bash
ssh root@VPS_IP mkdir -p ~/.ssh && chmod 700 ~/.ssh echo 'ssh-ed25519 AAAA...your-key... USER@my-pc' >> ~/.ssh/authorized_keys sed -i 's/\r$//' ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

La línea sed elimina cualquier fin de línea de Windows que haría ilegible la clave. No uses tuberías de PowerShell hacia ssh para esto: Windows PowerShell 5.1 puede añadir retornos de carro a los datos.

🧰 Activar ssh-agent en Windows

Sin agente tendrás que escribir la frase de paso en cada conexión. El servicio ssh-agent viene instalado, pero desactivado o en inicio manual por defecto. En un PowerShell de administrador:

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

Luego, en un PowerShell normal, carga tu clave una vez y lista las claves cargadas:

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

El agente conserva la clave tras reiniciar, así que no se volverá a pedir.

✅ Probar el acceso con clave

Vuelve a conectarte. Deberías obtener una consola sin que el servidor pida la contraseña de root:

PowerShell
ssh root@VPS_IP

Para ver exactamente qué método se usa, añade -v y busca Server accepts key y Authenticated to ... using publickey:

PowerShell
ssh -v root@VPS_IP

No sigas adelante hasta que funcione y mantén esta sesión abierta.

🚫 Desactivar la autenticación por contraseña en el servidor

En Ubuntu y Debian, /etc/ssh/sshd_config.d/ puede contener ya un archivo (como 50-cloud-init.conf) que habilita contraseñas. SSH usa el primer valor que lee, así que crea un archivo que se ordene antes. Ejecuta esto como root en el VPS:

Bash
grep -ri 'PasswordAuthentication' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ cat > /etc/ssh/sshd_config.d/10-keys-only.conf <<'EOF' PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-password EOF sshd -t && systemctl reload ssh

En AlmaLinux/Rocky el servicio se llama sshd: usa systemctl reload sshd. Asegúrate de que el sshd_config principal contiene la línea Include /etc/ssh/sshd_config.d/*.conf cerca del inicio (es lo habitual). sshd -t no imprime nada cuando la sintaxis es válida.

Desde una ventana nueva, confirma que ahora se rechazan las contraseñas mientras tu clave sigue funcionando:

PowerShell
ssh -o PubkeyAuthentication=no root@VPS_IP

La respuesta esperada es Permission denied (publickey).

🛠️ Solución de problemas

Permission denied (publickey). La clave no está en el authorized_keys de la cuenta correcta, se pegó en varias líneas o los permisos son incorrectos. En el servidor ejecuta chmod 700 ~/.ssh y chmod 600 ~/.ssh/authorized_keys y comprueba que la línea empieza por ssh-ed25519.

WARNING: UNPROTECTED PRIVATE KEY FILE. Otras cuentas de Windows pueden leer tu clave privada. Restríngela a tu usuario:

PowerShell
icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r /grant:r "${env:USERNAME}:F"

Error connecting to agent: No such file or directory. El servicio ssh-agent no está en marcha; inícialo como se indica arriba.

Bloqueado tras el cambio. Usa la consola del VPS desde tu área de cliente, elimina /etc/ssh/sshd_config.d/10-keys-only.conf, ejecuta sshd -t y recarga el servicio SSH.


🚀 Tu PC con Windows ya entra al VPS con una clave ed25519 y las contraseñas están desactivadas. Guarda una copia de tu clave privada en un lugar seguro.

Mantente al día con las últimas ofertas, descuentos y promociones especiales.

Ver promociones

Utilizamos cookies

Utilizamos cookies analíticas para mejorar su experiencia en nuestro sitio. No vendemos datos a terceros. Más información en nuestra política de privacidad.