Claves SSH para entrar a tu servidor sin contraseña
En pocas palabras
Con una clave SSH entrás al servidor sin tipear su contraseña, y de paso le sacás a los robots su blanco favorito. Son cuatro pasos, en este orden: generás el par con ssh-keygen -t ed25519 en tu computadora (Linux, macOS y Windows 10 u 11 ya traen OpenSSH), cargás la parte pública en ~/.ssh/authorized_keys del servidor, comprobás desde otra terminal que entra, y recién ahí ponés PasswordAuthentication no. La clave privada nunca sale de tu equipo. Cuando el servidor insiste con la contraseña, el culpable suele ser un permiso mal puesto en ~/.ssh o una clave cargada en el usuario equivocado.
Qué ganás con una clave
Con contraseña, el secreto viaja al servidor en cada conexión y cualquiera puede probar suerte. Con una clave, el servidor propone un desafío distinto en cada conexión, tu computadora lo firma con la parte privada y el servidor comprueba la firma con la parte pública que tiene guardada. Por la red no pasa nada que sirva para entrar después.
La diferencia se ve en los registros de cualquier VPS con IP pública: miles de intentos por día contra root, admin, ubuntu y otros nombres comunes. Con la contraseña apagada, todos esos intentos se cortan antes de empezar. Una clave ed25519, además, es corta, rápida y la aceptan todas las distribuciones actuales.
Paso 1: generar el par en tu computadora
Todo esto se hace en tu equipo, no en el servidor: la Terminal en macOS, cualquier consola en Linux, PowerShell en Windows. El comando es el mismo en los tres:
ssh-keygen -t ed25519 -C "ana@oficina-2026"- El texto de
-Ces solo una etiqueta. Poné quién sos y desde qué equipo: dentro de un año, en el servidor, es lo que te dice de dónde viene cada clave. - Aceptá la ubicación que propone:
~/.ssh/id_ed25519en Linux y macOS,C:\Users\ana\.ssh\id_ed25519en Windows. Si pregunta por sobrescribir, es porque existe una clave anterior en esa ruta: contestá que no, porque pisarla te deja sin entrada en cada servidor donde esté cargada. - Ponele una frase de paso. Si te roban la notebook, el archivo solo no alcanza para entrar a ningún lado, y con el agente (más abajo) la frase se escribe una vez por sesión.
- Quedan dos archivos. El que termina en
.pubes la clave pública: se puede mandar por correo o pegar en un formulario sin riesgo. El otro es la privada, y no se copia a ningún lado.
Paso 2: cargar la clave pública en el servidor
La clave se carga en la cuenta con la que vas a entrar. Si el servidor es nuevo y solo tenés root, cargala ahí y después creá tu propio usuario, como se explica en usuario administrador con sudo.
Desde Linux o macOS se usa ssh-copy-id: te pide la contraseña del servidor una vez más, crea ~/.ssh/authorized_keys si hace falta y suma tu clave a la lista, respetando las que ya había. Con -p le indicás el puerto si SSH no escucha en el 22, y con -i elegís qué clave mandar si tenés varias.
En Windows esa herramienta no viene, pero la misma tarea sale con una línea de PowerShell que le pasa el .pub al servidor y lo suma a la lista. El umask 077 hace que la carpeta y el archivo nuevos queden con los permisos que SSH exige.
# Linux o macOS
ssh-copy-id -p 22 -i ~/.ssh/id_ed25519.pub ana@198.51.100.20
# Windows, en PowerShell
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ana@198.51.100.20 "umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"Paso 3: probar desde otra terminal
- No cierres la sesión que ya tenés abierta en el servidor. Es tu salida de emergencia si algo queda mal.
- Abrí una terminal nueva y conectate forzando el uso de la clave:
ssh -o PreferredAuthentications=publickey ana@198.51.100.20. Si entra, o si solo te pide la frase de paso de tu clave, funciona. - Si responde "Permission denied", repetí con
-vy buscá tres líneas: "Offering public key" (qué clave ofrece tu equipo), "Server accepts key" (si el servidor la reconoce) y "Authenticated" (si terminó de entrar). La que falta te dice dónde está el problema.
Un archivo de configuración para no escribir IP ni puerto
En ~/.ssh/config, en tu computadora, cada servidor puede tener un nombre corto con todos sus datos. Después alcanza con ssh tienda, y el mismo nombre sirve para scp, rsync y sftp.
Host tienda
HostName 198.51.100.20
User ana
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
AddKeysToAgent yesIdentitiesOnly yesevita que tu equipo pruebe todas sus claves hasta dar con la correcta. Con cinco o seis cargadas, el servidor corta antes con "Too many authentication failures".AddKeysToAgent yessuma la clave al agente la primera vez que la usás, así no volvés a escribir la frase de paso en esa sesión.- En macOS podés agregar
UseKeychain yespara que la frase quede en el Llavero. Si compartís el archivo con un equipo Linux, poné antesIgnoreUnknown UseKeychain, porque Linux no conoce esa opción y da error. - El archivo tiene que ser solo tuyo:
chmod 600 ~/.ssh/config. Si otros usuarios pueden escribirlo, SSH se niega a leerlo.
El agente en cada sistema
- Linux: en casi todos los escritorios el agente arranca solo. Si
ssh-add -ldice que no hay agente, levantalo en esa terminal coneval "$(ssh-agent -s)"y cargá la clave conssh-add ~/.ssh/id_ed25519. - macOS: el agente ya corre.
ssh-add --apple-use-keychain ~/.ssh/id_ed25519carga la clave y guarda la frase en el Llavero, que la recuerda aun después de reiniciar. - Windows: el servicio viene apagado. En una PowerShell como administrador,
Get-Service ssh-agent | Set-Service -StartupType Automaticy despuésStart-Service ssh-agent. Desde tu usuario,ssh-addcarga la clave.
Paso 4: apagar la contraseña
Con la clave probada, la contraseña se apaga en el servidor. Conviene hacerlo en un archivo propio dentro de /etc/ssh/sshd_config.d/ y no en el principal: en Debian 12 y 13, Ubuntu 24.04 y AlmaLinux 9 y 10 esa carpeta se lee al principio, y en SSH vale el primer valor que aparece para cada opción. Con un nombre que empiece con 01-, tu archivo se lee antes que el 50-cloud-init.conf que traen algunas imágenes de nube y que vuelve a habilitar la contraseña.
sudo tee /etc/ssh/sshd_config.d/01-solo-claves.conf <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
EOF
sudo sshd -t
sudo systemctl restart ssh # en AlmaLinux: sudo systemctl restart sshdsshd -trevisa la sintaxis: el silencio significa que el archivo es válido, y cualquier error se corrige antes de reiniciar.- Reiniciar el servicio no echa a nadie: la sesión que dejaste abierta en el paso 3 sigue funcionando.
- Confirmá los valores en uso con
sudo sshd -T | grep -Ei "passwordauth|kbdinteractive|permitroot". - Desde tu computadora,
ssh -o PubkeyAuthentication=no ana@198.51.100.20tiene que rebotar sin ofrecerte escribir la contraseña. PermitRootLogin prohibit-passworddeja entrar a root solo con clave. Si ya trabajás con un usuario con sudo, podés ponerno.
Si el servidor ignora tu clave
| Qué pasa | Por qué | Arreglo |
|---|---|---|
| Pide la contraseña como si la clave no existiera | La carpeta ~/.ssh, authorized_keys o el home pueden ser modificados por otros, y SSH descarta la clave | chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys y chmod go-w ~ |
| Lo mismo, con los permisos bien | La carpeta la creó root y quedó a su nombre | sudo chown -R ana:ana /home/ana/.ssh |
| Entra como root pero no como ana, o al revés | La clave quedó en el authorized_keys de la otra cuenta | Cargar la clave en la cuenta con la que te conectás |
| "Too many authentication failures" | Tu equipo ofreció demasiadas claves antes de la correcta | IdentitiesOnly yes y la clave indicada en ~/.ssh/config |
| "UNPROTECTED PRIVATE KEY FILE" | Otros usuarios de tu equipo pueden leer la clave privada | chmod 600 ~/.ssh/id_ed25519 |
| Falla solo en AlmaLinux | SELinux: la carpeta vino copiada de otro lado con una etiqueta que SSH no puede leer | restorecon -Rv ~/.ssh |
| Una clave RSA contra un servidor muy viejo | Las versiones nuevas de OpenSSH ya no firman con SHA-1 | Actualizar el servidor; como parche, -o PubkeyAcceptedAlgorithms=+ssh-rsa |
El motivo exacto del rechazo queda en el servidor: sudo journalctl -u ssh -n 30 en Debian y Ubuntu, sudo journalctl -u sshd -n 30 en AlmaLinux.
Cuatro salidas si perdiste el acceso
- Con la primera sesión todavía abierta, borrá el archivo que creaste en
/etc/ssh/sshd_config.d/y reiniciá SSH. Todo vuelve a como estaba. - Si tenés otro usuario con su propia clave, entrá con ese y corregí desde ahí.
- En los servidores cloud de InHosting tenés una consola de rescate, que entra al equipo sin pasar por SSH ni por la red.
- Si no te queda ninguna de esas vías, escribinos por ticket y lo resolvemos con vos.
Preguntas frecuentes
¿Qué significa el aviso REMOTE HOST IDENTIFICATION HAS CHANGED?
Que el servidor presentó una huella distinta de la que tu equipo tenía guardada. Si reinstalaste el sistema, es lo esperable: borrá la huella vieja con ssh-keygen -R 198.51.100.20 y volvé a conectarte. Si no cambiaste nada, no sigas: puede haber alguien en el medio, y conviene consultarlo antes.
¿Puedo usar una llave física en lugar de un archivo?
Sí, con una llave FIDO2 y OpenSSH 8.2 o posterior en los dos extremos: ssh-keygen -t ed25519-sk genera una clave que solo funciona con la llave enchufada y un toque. Si te roban el archivo, sin la llave no sirve.
Vendí la notebook: ¿cómo invalido su clave?
Editá ~/.ssh/authorized_keys en el servidor y eliminá la línea que termina con la etiqueta de ese equipo. Rige desde la próxima conexión; si hay una sesión abierta desde ahí, cortala aparte.
¿Uso la misma clave para GitHub y para el servidor?
Se puede: la pública se carga en los dos lados y no compromete nada. Si preferís separarlos, generá otra clave con otro nombre y asignala con IdentityFile en un bloque Host github.com de ~/.ssh/config.
¿Y si en Windows uso PuTTY?
PuTTY usa su propio formato de clave, .ppk, y PuTTYgen convierte entre ese formato y el de OpenSSH. Con el cliente de OpenSSH que ya trae Windows no hace falta: es el mismo que usan Linux y macOS. Lo explicamos en conectarse por SSH desde Windows.
Seguí leyendo
Conectarte por SSH desde Windows a tu VPS Linux, paso a paso
El cliente OpenSSH ya viene en Windows 10 y 11. Primera conexión, claves ed25519, alias por servidor, copia de archivos y qué hacer si no conecta.
6 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
Firewall y fail2ban en un VPS Linux, sin quedarte afuera
Cómo activar ufw o firewalld sin cortar tu propio acceso, qué puertos abrir según lo que corre en el VPS y cómo frenar con fail2ban los ataques a SSH.
7 min de lectura
