~/docs /DevOps/SSH Key AUTH
DevOps
SSH Key AUTH
Imported from Notion: SSH Key AUTH
updated:: 2026.07.10
Qué resuelve
Autenticación SSH por clave pública: generar clave local, instalar la pública en el servidor, probar acceso y endurecer el daemon sin bloquearte fuera.
[!NOTE] ⚠️ No desactives acceso por contraseña hasta confirmar que puedes entrar por clave en una segunda terminal.
Flujo correcto
-
LOCAL: generar clave.
-
LOCAL: copiar clave pública al servidor.
-
TEST: entrar por clave.
-
REMOTO: validar y endurecer
sshd_config. -
TEST FINAL: comprobar que contraseña ya no entra.
1. Generar clave Ed25519
ssh-keygen -t ed25519 -a 100 -C "amis13@funding-fee"
Recomendaciones:
-
pulsa ENTER para ruta por defecto si no necesitas otra;
-
usa passphrase si la clave está en tu equipo personal;
-
revisa antes si ya existe
~/.ssh/id_ed25519.
Archivos creados:
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
2. Cargar clave en ssh-agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
3. Copiar clave pública al servidor
Opción recomendada
ssh-copy-id amis13@IP_DEL_SERVIDOR
Usarás la contraseña actual una última vez.
Opción manual
En LOCAL:
cat ~/.ssh/id_ed25519.pub
En REMOTO:
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
[!NOTE] 💡 La clave pública debe quedar en una sola línea dentro de
authorized_keys.
4. Test obligatorio
Desde LOCAL:
ssh amis13@IP_DEL_SERVIDOR
Resultado esperado:
-
entra sin pedir contraseña del usuario remoto;
-
si pusiste passphrase, puede pedir la passphrase de la clave.
[!NOTE] 🚨 Si este test falla, no sigas con el endurecimiento.
5. Endurecer sshd_config
En REMOTO:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
Ajustes base:
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
Notas:
-
KbdInteractiveAuthenticationsustituye al alias antiguoChallengeResponseAuthentication. -
No recomiendo tocar
UsePAMcomo ajuste genérico; en muchas distros conviene dejarlo como venga por defecto. -
Si hay directivas duplicadas, revisa la configuración efectiva antes de reiniciar.
6. Validar antes de reiniciar SSH
sudo sshd -t
Si no devuelve nada, la sintaxis es válida.
Ver configuración efectiva:
sudo sshd -T | grep -E 'pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|permitrootlogin'
7. Reiniciar SSH sin cerrar sesión
Debian/Ubuntu suelen usar ssh:
sudo systemctl restart ssh
Otras distros pueden usar sshd:
sudo systemctl restart sshd
[!NOTE] ⚠️ Mantén abierta la sesión actual. Prueba desde otra terminal antes de cerrar.
8. Test final
Entrar normal:
ssh amis13@IP_DEL_SERVIDOR
Forzar contraseña, debe fallar:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no amis13@IP_DEL_SERVIDOR
Resultado esperado:
Permission denied (publickey).
Bonus
Limitar intentos con UFW
sudo ufw limit ssh
Cambiar puerto
Primero abre firewall:
sudo ufw allow 2222/tcp
Luego en /etc/ssh/sshd_config:
Port 2222
Después valida:
sudo sshd -t
sudo systemctl restart ssh
ssh -p 2222 amis13@IP_DEL_SERVIDOR
Checklist final
-
Tengo backup de
sshd_config. -
Puedo entrar por clave antes de desactivar contraseña.
-
Ejecuté
sudo sshd -t. -
Reinicié SSH sin cerrar la sesión actual.
-
Probé una segunda conexión.
-
Forzar contraseña falla como esperado.
Referencias
- OpenSSH
sshd_config: https://man.openbsd.org/sshd_config
- EOF -