Terminal Linux con conexion SSH mediante claves publicas

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.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *