Cómo y por qué usar los comandos ssh-copy-id y ssh-keygen en Linux

Popular:
¡MEJORA LA CONFIGURACIÓN DE TU SERVIDOR! APLICAR AVA Y LANZA CON UN 15% DE DESCUENTO
USA EL CÓDIGO PROMOCIONAL:

Secure Shell (SSH) es una de las herramientas más utilizadas para administrar y acceder de forma segura a remote systems. En lugar de depender de la autenticación tradicional basada en contraseñas, que es menos segura y propensa a ataques de fuerza bruta, los administradores de sistemas suelen configurar la autenticación basada en claves SSH para lograr mayor seguridad, escalabilidad y automatización.

Esta guía explica cómo generar claves SSH usando ssh-keygen, copiarlas de forma segura a un servidor remoto usando ssh-copy-id, verificar la configuración y seguir las mejores prácticas de seguridad.

Entendiendo la autenticación basada en claves SSH

Con las claves SSH, la autenticación ocurre usando un par de claves pública-privada:

  • Clave privada (id_rsa) → Permanece en tu máquina local y debe estar protegida.
  • Clave pública (id_rsa.pub) → Se coloca en el servidor remoto bajo ~/.ssh/authorized_keys.
  • Al conectarse, SSH usa criptografía de clave pública para autenticarte automáticamente sin exponer contraseñas.

Este método es más seguro y más conveniente, especialmente para desarrolladores, sysadmins y despliegues automatizados.

Generando claves SSH con ssh-keygen

Ejecuta el siguiente comando para generar un nuevo par de claves SSH:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Opciones explicadas:

  • -t rsa → Especifica el algoritmo de cifrado (RSA).
  • -b 4096 → Usa una clave de 4096 bits para un cifrado más fuerte (recomendado).
  • -C → Añade un comentario para identificar la clave, normalmente tu correo electrónico o nombre de usuario.

Indicaciones interactivas:

  • Archivo para guardar la clave → Pulsa Enter para aceptar el valor predeterminado:

    ~/.ssh/id_rsa

  • Passphrase (opcional pero recomendada) → Añade una capa adicional de seguridad.
    Si se establece, deberás introducirla al usar la clave privada.

 Copiando la clave pública a un servidor remoto (ssh-copy-id)

Una vez generadas las claves, usa ssh-copy-id para transferir tu clave pública al servidor remoto:

ssh-copy-id user@remote-server
  • user → Nombre de usuario en el servidor remoto.
  • remote-server → Nombre de host o dirección IP de la máquina remota.

Este comando:

  • Añade tu clave pública (id_rsa.pub) a:

    ~/.ssh/authorized_keys
  • Establece automáticamente los permisos correctos para el directorio .ssh y el archivo de clave.

Método alternativo (configuración manual)

Si ssh-copy-id no está disponible, puedes copiar la clave manualmente:

cat ~/.ssh/id_rsa.pub | ssh user@remote-server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Este comando:

  • Crea el directorio .ssh si falta.
  • Añade tu clave pública.
  • Establece permisos seguros.

Verificando la autenticación SSH con clave

Para confirmar que todo funciona:

ssh user@remote-server
  • Si está configurado correctamente, deberías iniciar sesión sin introducir una contraseña.

  • Si se estableció una passphrase, se te pedirá que la introduzcas en su lugar.

Mejores prácticas de seguridad

a) Usar cifrado fuerte

  • Prefiere RSA 4096 o Ed25519:

    ssh-keygen -t ed25519 -C "your_email@example.com"
  • Las claves Ed25519 son más pequeñas, más rápidas y más seguras.

b) Restringir permisos en los archivos de clave

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

SSH se negará a usar las claves si los permisos son demasiado abiertos.

c) Desactivar la autenticación por contraseña (opcional, recomendado)

En el servidor remoto, edita:

sudo nano /etc/ssh/sshd_config

Establece:

PasswordAuthentication no

ChallengeResponseAuthentication no
UsePAM yes

Luego reinicia SSH:

sudo systemctl restart ssh

d) Usar SSH Agent para la gestión de passphrase

En lugar de escribir tu passphrase cada vez, usa ssh-agent:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

Esto almacena en caché tu clave para la sesión.

Solución de problemas comunes

ProblemaPosible causaSolución
Sigue pidiendo una contraseñaPermisos incorrectos o falta la claveComprueba los permisos de ~/.ssh y authorized_keys
Error “Permission denied”Nombre de usuario o IP incorrectosConfirma las credenciales de inicio de sesión correctas
ssh-copy-id no encontradoFalta la utilidadInstala mediante: sudo apt install openssh-client
Clave ignoradaPermisos de archivo demasiado permisivosEjecuta chmod 600 ~/.ssh/id_rsa

Conclusión

Usar ssh-keygen y ssh-copy-id mejora la seguridad y la comodidad al administrar servidores remotos. Al configurar la autenticación SSH con clave, los administradores pueden eliminar los riesgos asociados con los inicios de sesión basados en contraseñas mientras agilizan el acceso seguro.