← Volver al listado de tecnologías

Capítulo 2: SSH Básico - Claves Públicas/Privadas

Por: SiempreListo
linuxseguridadsshclavesed25519

Capítulo 2: SSH Básico - Claves Públicas/Privadas

¿Por qué usar claves SSH?

Las contraseñas son vulnerables a:

Las claves SSH ofrecen:

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?

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