Conectarte por SSH desde Windows a tu VPS Linux, paso a paso
En pocas palabras
Windows 10 y 11 traen el cliente OpenSSH, así que no hace falta instalar nada: abrís PowerShell o Terminal y escribís ssh root@ seguido de la IP del VPS. La primera vez confirmás la huella del servidor y ponés la contraseña del correo de bienvenida. Después conviene crear una clave ed25519 con ssh-keygen, copiar la parte pública al servidor y desactivar el ingreso con contraseña. Para mover archivos está scp, y si la conexión falla, Test-NetConnection te dice en segundos si el problema es la red, el puerto o la clave.
Qué tener a mano
En los ejemplos usamos 198.51.100.20, una dirección reservada para documentación. Reemplazala por la de tu servidor.
- La IP pública del VPS, que figura en el correo de bienvenida y en el detalle del servicio en el área de clientes.
- El usuario:
rooten un VPS recién entregado, o el usuario con sudo que hayas creado después. - La contraseña inicial, o una clave que ya esté cargada en el servidor.
- El puerto de SSH. Si no lo cambiaste, es el 22 y no hace falta escribirlo.
Si Windows dice que ssh no existe
Windows 10 trae el cliente instalado desde 2018, pero algunas imágenes corporativas lo quitan. Para comprobarlo y agregarlo, abrí PowerShell como administrador: la primera línea muestra si está instalado y la segunda lo agrega.
Get-WindowsCapability -Online | Where-Object Name -like "OpenSSH.Client*"
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0La primera conexión
Abrí Terminal (en Windows 11 viene de fábrica) o PowerShell y escribí:
ssh root@198.51.100.20- Windows muestra la huella del servidor, en una línea que empieza con
ED25519 key fingerprint is SHA256:, y pregunta si querés seguir. Escribíyesy Enter. - Pegá o escribí la contraseña. No aparece nada mientras tipeás: es así a propósito.
- El prompt cambia a algo como
root@vps:~#. Desde acá, todo lo que escribís corre en el servidor. - Para cerrar,
exito Ctrl+D. Si SSH escucha en otro puerto, agregalo con-p, por ejemplossh -p 2222 root@198.51.100.20.
Una clave ed25519 en lugar de la contraseña
Con una clave, la contraseña deja de viajar y deja de poder adivinarse. Se genera un par: la privada queda en tu computadora, en C:\Users\tu-usuario\.ssh\id_ed25519, y la pública, el archivo que termina en .pub, se copia a cada servidor al que quieras entrar. El procedimiento desde Linux y macOS está en claves SSH para entrar sin contraseña.
Generala en PowerShell. Cuando pregunte la ruta, Enter; cuando pida una frase de paso, poné una: si alguien copia el archivo, sin la frase no le sirve. El comentario de -C te ayuda a saber después de qué equipo es cada clave.
ssh-keygen -t ed25519 -C "notebook-oficina"Copiar la clave pública al servidor
Windows no trae ssh-copy-id. La misma tarea se hace leyendo el archivo .pub y mandándolo por la conexión SSH, que lo agrega al final de authorized_keys con permisos cerrados:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@198.51.100.20 "umask 077; mkdir -p .ssh; cat >> .ssh/authorized_keys"- Te pide la contraseña del servidor por última vez.
- Sin cerrar esa ventana, abrí otra y conectate de nuevo. Si te pide la frase de la clave y no la contraseña del servidor, funcionó.
- Para otros servidores, repetí el comando con cada IP: la misma clave pública sirve para todos.
Que Windows recuerde la frase de paso
Si le pusiste frase a la clave, el agente de SSH de Windows la guarda asociada a tu usuario y no te la pide en cada conexión. Viene desactivado: las dos primeras líneas lo habilitan (en PowerShell como administrador) y la tercera carga la clave, ya como usuario normal.
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519Un alias para cada servidor
Con más de un servidor, recordar IPs, usuarios y puertos cansa. Creá el archivo config, sin extensión, en la carpeta .ssh de tu usuario, con un bloque por equipo. Después alcanza con ssh tienda o ssh pruebas:
Host tienda
HostName 198.51.100.20
User deploy
IdentityFile ~/.ssh/id_ed25519
Host pruebas
HostName 198.51.100.35
User root
Port 2222Copiar archivos: scp, WinSCP y VS Code
El mismo cliente trae scp para mover archivos por la conexión cifrada, y respeta los alias del archivo config. La primera línea sube un archivo a la carpeta del usuario en el servidor; la segunda baja un registro a la carpeta donde estás parado:
scp .\respaldo.sql tienda:
scp pruebas:/var/log/nginx/error.log .- WinSCP hace lo mismo con ventanas y arrastrar y soltar, y puede usar tu clave: si hace falta, la convierte al formato de PuTTY.
- Visual Studio Code, con la extensión Remote - SSH, abre las carpetas del servidor como si fueran locales y lee tu
config. - PuTTY sigue siendo una opción en equipos viejos. Necesita la clave en formato
.ppk, que PuTTYgen genera desde la tuya con Conversions › Import key.
Cerrar el ingreso con contraseña
Con la clave andando, lo siguiente es que el servidor no acepte más contraseñas: es la puerta que los bots prueban todo el día. En Debian 12 y 13, Ubuntu 24.04 y AlmaLinux 9 y 10, el archivo principal incluye primero lo que haya en /etc/ssh/sshd_config.d/, y SSH se queda con el primer valor que encuentra. Un archivo cuyo nombre empiece con 00 gana sobre cualquier otro que haya dejado la imagen del sistema.
Hacelo como root o con sudo desde la sesión que ya tenés abierta, y no la cierres hasta probar una conexión nueva. sshd -t valida la sintaxis y sshd -T muestra el valor que efectivamente quedó. El servicio se llama ssh en Debian y Ubuntu, y sshd en AlmaLinux. Para frenar además a los que prueban usuarios y claves, sumá firewall y fail2ban.
printf "PasswordAuthentication no\nKbdInteractiveAuthentication no\n" > /etc/ssh/sshd_config.d/00-solo-claves.conf
sshd -t && sshd -T | grep -Ei "passwordauth|kbdinteractive"
systemctl reload ssh # en AlmaLinux: systemctl reload sshdCuando no conecta: qué dice cada error
Antes de tocar nada, averiguá si el puerto responde. PowerShell lo prueba sin SSH de por medio:
Test-NetConnection 198.51.100.20 -Port 22| Lo que ves | Qué pasa | Qué probar |
|---|---|---|
| TcpTestSucceeded : False, o ssh espera y termina en timed out | La conexión no llega: IP mal escrita, VPS apagado o un firewall que la descarta | Revisá la IP y el estado del servicio en el área de clientes; probá desde otra red |
| Connection refused | El servidor contesta, pero nada escucha en ese puerto | Confirmá el puerto; si tocaste la configuración, puede que SSH no haya arrancado |
| Permission denied (publickey) | El servidor ya no acepta contraseña y tu clave no coincide | Conectate con ssh -v para ver qué clave ofrece; revisá el usuario y authorized_keys |
| Permission denied, please try again | Usuario o contraseña incorrectos | Cuidado con los reintentos: con fail2ban instalado, te deja afuera un rato |
| WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! | La huella guardada no coincide | Solo si reinstalaste: ssh-keygen -R con la IP. Si no, frená y consultá |
Si el VPS dejó de responder por la red después de un cambio de configuración, escribinos por ticket con la hora y el último cambio que hiciste.
Preguntas frecuentes
¿Qué clave conviene: ed25519 o RSA?
ed25519, salvo que tengas que entrar a un equipo muy viejo que no la soporte. Es más corta, más rápida y tan segura como una RSA de 3072 bits. Si necesitás RSA, generala con ssh-keygen -t rsa -b 4096.
¿Y si mi VPS tiene Windows Server?
Ahí no se entra por SSH sino por Escritorio remoto (RDP), con el usuario Administrador y la contraseña del correo de bienvenida. La aplicación viene con Windows: buscala como Conexión a Escritorio remoto o escribí mstsc.
¿Uso la misma clave en la notebook y en la PC de escritorio?
Se puede copiar el archivo privado, pero es mejor una clave por equipo. Si perdés la notebook, borrás su línea de authorized_keys en cada servidor y la PC sigue entrando. El comentario que pusiste con -C te dice cuál es cuál.
¿Cómo entro si perdí la clave y ya desactivé las contraseñas?
Desde otra computadora que tenga una clave cargada, si la hay. Si no queda ninguna, abrí un ticket desde el área de clientes y lo vemos juntos.
Seguí leyendo
Claves SSH para entrar a tu servidor sin contraseña
Generar una clave ed25519 en Linux, macOS o Windows, cargarla en el servidor, usar el agente y apagar el acceso por contraseña sin quedarte afuera.
8 min de lectura
Usuario administrador con sudo: crearlo y dejar de entrar como root
Cómo crear tu usuario con sudo en Debian, Ubuntu y AlmaLinux, pasarle la clave SSH, probarlo y recién después cerrar el acceso de root por SSH.
7 min de lectura
Primeros pasos con tu VPS: la primera hora, en orden
Qué hacer apenas recibís un VPS con Linux, antes de instalar tu aplicación: actualizar, crear tu usuario, entrar con clave SSH, firewall, hora y respaldos.
5 min de lectura
