
ssh-keygen -t rsa) y desactivaba la contraseña con UsePAM no + /etc/init.d/ssh restart. Hoy el default es Ed25519; PAM sigue activado; el drop-in va en sshd_config.d; solo se corta la contraseña después de probar la clave en una segunda sesión.La contraseña en SSH sigue cayendo ante fuerza bruta. El par de claves —pública en el servidor, privada en tu máquina, protegida por passphrase— es el inicio de sesión de 2026. El OpenSSH de Ubuntu 24.04/26.04 ya genera Ed25519 si llamas a ssh-keygen sin flags (desde el 9.5). El resto son permisos, ssh-copy-id y no quedarse fuera.
Genera la clave en el cliente
Como su usuario, nunca como root:
ssh-keygen -t ed25519 -a 64 -C "$(whoami)@$(hostname)-2026"
Acepte ~/.ssh/id_ed25519. Ponga una passphrase de verdad — la clave privada sin frase es un inicio de sesión en un archivo. -a 64 aumenta las rondas KDF. Servidor antiguo que no habla Ed25519 (raro): ssh-keygen -t rsa -b 4096. DSA está muerto en OpenSSH 7+.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
Instala la pública en el servidor
ssh-copy-id crea ~/.ssh, ajusta los permisos y añade la línea en authorized_keys:
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
# porta não padrão:
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 usuario@servidor
Sin ssh-copy-id:
ssh usuario@servidor 'mkdir -p ~/.ssh && chmod 700 ~/.ssh'
cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor 'cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'
Prueba antes de tocar el sshd:
ssh -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes usuario@servidor
Tiene que entrar sin la contraseña de la cuenta (la passphrase de la clave, si la tiene, el agente la pregunta). Deje esa sesión abierta. Abra otra terminal para el endurecimiento.
Desactive contraseña — sin UsePAM no
En Ubuntu, UsePAM no (el consejo de 2017) rompe otras rutas de PAM. Mantenga PAM. Use drop-in, no edite el sshd_config entero:
sudo tee /etc/ssh/sshd_config.d/99-keys-only.conf <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
EOF
sudo sshd -t && sudo systemctl reload ssh
En RHEL/Rocky el servicio es sshd: sudo systemctl reload sshd. Confirme en la sesión que quedó abierta, y en una nueva:
ssh usuario@servidor
Si la nueva falla, la sesión anterior aún salva. No cierre la consola hasta que la clave funcione dos veces.
Agente, config, clave física
ssh-agent (o gnome-keyring) guarda la privada desbloqueada en la sesión gráfica:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Un ~/.ssh/config evita flag:
Host lab
HostName 192.0.2.10
User nilton
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
YubiKey / FIDO2: ssh-keygen -t ed25519-sk (OpenSSH 8.2+). La privada no sale del token. ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub usuario@servidor.
Cierre
Ed25519, ssh-copy-id, probar, solo entonces quitar la contraseña. El diagrama de 2017 (cliente, sesión, claves) sigue siendo válido; el algoritmo y el init.d no. Página de manual: man ssh-keygen, man sshd_config.