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 -Ven 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.
PowerShellssh -V
🔐 Generar una clave ed25519
Abre PowerShell (normal, no de administrador) y ejecuta:
PowerShellssh-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:
PowerShellGet-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):
Bashssh 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:
PowerShellGet-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:
PowerShellssh-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:
PowerShellssh root@VPS_IP
Para ver exactamente qué método se usa, añade -v y busca Server accepts key y Authenticated to ... using publickey:
PowerShellssh -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:
Bashgrep -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:
PowerShellssh -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:
PowerShellicacls $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.