SSH sin contraseña: configura claves públicas paso a paso
Escribir la contraseña cada vez que te conectas por SSH a un servidor es un rollo. Y encima es menos seguro que usar claves. En este post te explico cómo configurar SSH sin contraseña usando claves públicas — algo que hago en todos los servidores que administro desde el primer día.
Cómo funciona la autenticación por clave pública
El concepto es sencillo: en vez de una contraseña, usas un par de claves criptográficas.
- Clave privada: se queda en tu máquina local. Nunca la compartes.
- Clave pública: la copias al servidor. Es como el candado — sin la llave privada no sirve de nada.
Cuando te conectas, el servidor comprueba que tienes la clave privada que corresponde a la pública registrada. Sin contraseña, sin fricción, y mucho más seguro.
Paso 1: Generar el par de claves
ssh-keygen -t ed25519 -C "victor@todolinux.cloud"
Te preguntará dónde guardar la clave (Enter para la ruta por defecto) y si añadir una passphrase. Yo siempre uso passphrase — por si alguien accede a tu máquina.
¿Por qué ed25519 y no rsa? Más seguro, más rápido y claves más cortas. Si necesitas compatibilidad con sistemas antiguos usa rsa -b 4096.
# Resultado en ~/.ssh/
~/.ssh/id_ed25519 # clave privada — nunca la compartas
~/.ssh/id_ed25519.pub # clave pública — esta la copias al servidor
Paso 2: Copiar la clave pública al servidor
# La forma más rápida (necesitas la contraseña por última vez)
ssh-copy-id victor@192.168.1.100
# Con puerto diferente al 22
ssh-copy-id -p 2222 victor@192.168.1.100
# Si no tienes ssh-copy-id (Windows/macOS antiguo)
cat ~/.ssh/id_ed25519.pub | ssh victor@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Paso 3: Verificar que funciona
# Conectar sin contraseña
ssh victor@192.168.1.100
# Si algo falla, añade -v para depurar
ssh -v victor@192.168.1.100
Paso 4: Deshabilitar el acceso por contraseña
Una vez que las claves funcionan, desactiva el login por contraseña. Así los ataques de fuerza bruta no sirven de nada.
sudo nano /etc/ssh/sshd_config
# Cambiar estas líneas:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
# Reiniciar SSH
sudo systemctl restart sshd
Importante: antes de cerrar la sesión, abre otra terminal y verifica que puedes conectarte. Si algo sale mal y cierras sin comprobarlo, puedes quedarte sin acceso.
Gestionar múltiples servidores con ~/.ssh/config
Cuando tienes varios servidores, acordarte de qué clave usa cada uno es un lío. El archivo config lo resuelve:
# ~/.ssh/config
Host prod
HostName 192.168.1.100
User victor
IdentityFile ~/.ssh/id_ed25519
Host staging
HostName 192.168.1.200
User deploy
IdentityFile ~/.ssh/id_ed25519_staging
Port 2222
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
Con esto conectas así de simple:
ssh prod
ssh staging
ssh-agent: no repetir la passphrase en cada conexión
# Iniciar el agente
eval "$(ssh-agent -s)"
# Añadir tu clave (pide la passphrase una sola vez)
ssh-add ~/.ssh/id_ed25519
# Ver claves cargadas
ssh-add -l
Permisos correctos en ~/.ssh
SSH es muy estricto con los permisos. Si no están bien, no funciona:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys
Conclusión
Una vez configuras SSH con claves públicas no vuelves a las contraseñas. Más cómodo, más rápido y bastante más seguro. Y con el archivo ~/.ssh/config gestionar varios servidores es trivial.
En el próximo post veremos Systemd: cómo gestionar servicios en Linux. ¿Dudas con las claves SSH? Déjalas en los comentarios.
