¿Por qué usar claves SSH en lugar de contraseñas?
Las contraseñas tienen un problema fundamental: pueden adivinarse. Los bots de internet prueban millones de combinaciones por segundo. Una contraseña de 8 caracteres puede romperse en horas.
Una clave SSH de tipo ED25519 o RSA-4096 es matemáticamente imposible de adivinar con la tecnología actual. Además:
- No tenés que recordar contraseñas complejas
- Podés tener diferentes claves para diferentes servidores
- Podés revocar el acceso de una clave sin afectar a las demás
- Podés usarlas con passphrase para doble capa de seguridad
Cómo funciona el par de claves
El sistema usa criptografía asimétrica:
- Clave privada: se queda en tu computadora, nunca sale de ahí
- Clave pública: se copia al servidor, puede compartirse libremente
Cuando intentás conectarte, el servidor desafía a tu computadora con un mensaje cifrado con la clave pública. Solo quien tenga la clave privada correspondiente puede responder correctamente.
Generar el par de claves
En Linux y macOS
ssh-keygen -t ed25519 -C "descripcion-de-esta-clave"
El algoritmo ED25519 es el recomendado actualmente — más seguro y con claves más cortas que RSA.
Te va a preguntar:
- Dónde guardar: presioná Enter para usar
~/.ssh/id_ed25519 - Passphrase (opcional): una contraseña adicional para proteger la clave privada
En Windows (PowerShell / CMD)
ssh-keygen -t ed25519 -C "mi-clave-trabajo"
La clave se guarda en C:\Users\TuUsuario\.ssh\id_ed25519.
Ver la clave pública generada
cat ~/.ssh/id_ed25519.pub
Salida típica:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... descripcion-de-esta-clave
Este es el valor que copiás al servidor.
Copiar la clave pública al servidor
Método 1: ssh-copy-id (más fácil)
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@IP_DEL_SERVIDOR
Ingresá la contraseña del servidor una última vez. Después ya no la necesitás más.
Método 2: Manual
# Conectarte al servidor con contraseña
ssh usuario@IP_DEL_SERVIDOR
# Crear el directorio .ssh si no existe
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Crear o editar el archivo de claves autorizadas
nano ~/.ssh/authorized_keys
# Pegá la clave pública
# Permisos correctos (importante)
chmod 600 ~/.ssh/authorized_keys
Probar la conexión con clave
Sin cerrar la sesión actual, abrí otra terminal y probá:
ssh -i ~/.ssh/id_ed25519 usuario@IP_DEL_SERVIDOR
Si entrás sin que te pida contraseña, la clave está funcionando.
Deshabilitar el login por contraseña
Una vez que la clave funciona, editá /etc/ssh/sshd_config:
PasswordAuthentication no
ChallengeResponseAuthentication no
Recargá SSH:
sudo systemctl reload sshd
⚠️ Verificá que podés entrar con clave antes de hacer esto, o quedarás sin acceso.
Gestionar múltiples servidores con el archivo config
Creá ~/.ssh/config:
Host vps-produccion
HostName 203.0.113.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_produccion
Port 22
Host vps-staging
HostName 203.0.113.20
User ubuntu
IdentityFile ~/.ssh/id_ed25519_staging
Port 2222
Con esto podés conectarte simplemente con:
ssh vps-produccion
ssh vps-staging
Usar ssh-agent para no escribir la passphrase cada vez
Si tu clave tiene passphrase, usá ssh-agent:
# Iniciar el agente
eval "$(ssh-agent -s)"
# Agregar la clave (solo pide la passphrase una vez)
ssh-add ~/.ssh/id_ed25519
Revocar acceso de una clave
Simplemente eliminá esa línea del archivo ~/.ssh/authorized_keys en el servidor. El cambio es inmediato.
Buenas prácticas
- Una clave por dispositivo: no copies tu clave privada a otros equipos
- Passphrase en claves de producción: es la última línea de defensa
- Backup de la clave privada: guardala en un lugar seguro (password manager)
- Rotación periódica: en entornos de alta seguridad, rotá las claves cada 6-12 meses
Con claves SSH configuradas, el siguiente paso es asegurar el resto del servidor con un checklist completo de hardening.