Cómo y por qué usar los comandos ssh-copy-id y ssh-keygen en Linux
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_rsaPassphrase (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_keysEstablece 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-serverSi 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:
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 ~/.sshchmod 600 ~/.ssh/id_rsachmod 644 ~/.ssh/id_rsa.pubSSH 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_configEstablece:
PasswordAuthentication no
ChallengeResponseAuthentication noUsePAM yesLuego reinicia SSH:
sudo systemctl restart sshd) 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_rsaEsto almacena en caché tu clave para la sesión.
Solución de problemas comunes
| Problema | Posible causa | Solución |
|---|---|---|
| Sigue pidiendo una contraseña | Permisos incorrectos o falta la clave | Comprueba los permisos de ~/.ssh y authorized_keys |
| Error “Permission denied” | Nombre de usuario o IP incorrectos | Confirma las credenciales de inicio de sesión correctas |
| ssh-copy-id no encontrado | Falta la utilidad | Instala mediante: sudo apt install openssh-client |
| Clave ignorada | Permisos de archivo demasiado permisivos | Ejecuta 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.


