Capítulo 2: SSH Básico - Claves Públicas/Privadas
Capítulo 2: SSH Básico - Claves Públicas/Privadas
¿Por qué usar claves SSH?
Las contraseñas son vulnerables a:
- Ataques de fuerza bruta
- Ataques de diccionario
- Keyloggers
- Shoulder surfing
Las claves SSH ofrecen:
- Autenticación criptográfica fuerte
- Imposibilidad práctica de fuerza bruta
- Automatización segura de conexiones
Cómo Funciona
┌──────────────┐ ┌──────────────┐
│ Cliente │ │ Servidor │
│ │ │ │
│ Clave │ Desafío/Firma │ Clave │
│ Privada ────────────────────────────► Pública │
│ (secreta) │ │ (autorizada) │
└──────────────┘ └──────────────┘
El servidor envía un desafío que solo puede resolver quien posea la clave privada.
Paso 1: Generar Par de Claves
En tu máquina local (no en el servidor):
ssh-keygen -t ed25519 -C "[email protected]"
¿Por qué Ed25519?
- Más seguro que RSA
- Claves más cortas (256 bits vs 4096)
- Firma más rápida
Cuando pregunte por ubicación, acepta el default (~/.ssh/id_ed25519).
Passphrase
Se te pedirá una passphrase. Úsala. Esta protege tu clave privada si alguien accede a tu máquina.
Paso 2: Copiar Clave al Servidor
Método recomendado:
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
Método manual (si ssh-copy-id no está disponible):
cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Paso 3: Verificar Conexión
Antes de deshabilitar contraseñas, verifica que la clave funciona:
ssh -i ~/.ssh/id_ed25519 usuario@servidor
No debería pedir contraseña del servidor (solo la passphrase de tu clave si la configuraste).
Paso 4: Deshabilitar Autenticación por Contraseña
⚠️ IMPORTANTE: Mantén tu sesión SSH actual abierta.
En el servidor, edita la configuración de SSH:
sudo nano /etc/ssh/sshd_config
Modifica o agrega estas líneas:
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Reinicia SSH:
sudo systemctl restart sshd
Paso 5: Verificar
Desde otra terminal, intenta conectar:
ssh usuario@servidor
Debería funcionar con tu clave. Ahora intenta sin clave:
ssh -o PubkeyAuthentication=no usuario@servidor
Debería fallar con “Permission denied”.
SSH Agent
Para evitar escribir la passphrase constantemente:
# Iniciar agente
eval "$(ssh-agent -s)"
# Agregar clave
ssh-add ~/.ssh/id_ed25519
En sistemas con keychain gráfico (macOS, GNOME), esto suele ser automático.
Troubleshooting
Error: “Permission denied (publickey)”
Verifica permisos en el servidor:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Error: La clave no se acepta
Revisa que la clave pública esté correcta:
cat ~/.ssh/authorized_keys
Debe coincidir exactamente con tu ~/.ssh/id_ed25519.pub local.
Logs de SSH
Para diagnosticar problemas:
sudo tail -f /var/log/auth.log