Introducción al error Permission denied (publickey) en Linux
Uno de los problemas más frustrantes al administrar servidores o conectarse a máquinas remotas mediante SSH en Linux es encontrarse con el mensaje de error Permission denied (publickey). Este fallo impide por completo el acceso remoto, dejándote fuera del sistema si no dispones de acceso físico o por consola de recuperacion.
Causas principales del error de clave pública SSH
Este inconveniente de seguridad y autenticación suele estar provocado por una mala configuración en los permisos de los archivos del directorio home, la ausencia de la clave pública en el archivo authorized_keys del servidor remoto, o porque el servicio SSH no está configurado para aceptar autenticación por llaves.
Método 1: Verificar y corregir los permisos de archivos y carpetas SSH
El servidor SSH rechaza la conexión si los permisos en tu máquina local o en el servidor remoto son demasiado abiertos. Debes asegurarte de que la carpeta .ssh y sus archivos internos tengan los permisos estrictos recomendados por Linux.
- Abre tu terminal en la máquina local o remota según corresponda.
- Ejecuta el siguiente comando para corregir los permisos de la carpeta .ssh:
chmod 700 ~/.ssh - Asegúrate de que el archivo de la llave privada tenga permisos de lectura y escritura exclusivos para tu usuario:
chmod 600 ~/.ssh/id_rsa - Verifica que el archivo de claves autorizadas tenga los permisos correctos en el servidor remoto:
chmod 600 ~/.ssh/authorized_keys
Método 2: Copiar correctamente la clave pública al servidor remoto
Si la clave pública no se encuentra registrada en el servidor de destino, la autenticación fallará inevitablemente. Puedes solucionarlo utilizando la herramienta automatizada ssh-copy-id.
- Genera un par de claves si aún no lo has hecho ejecutando:
ssh-keygen -t rsa -b 4096 - Envía tu clave pública al servidor remoto ejecutando el siguiente comando desde tu terminal local:
ssh-copy-id usuario@tu_servidor_ip - Introduce la contraseña de tu usuario cuando sea solicitada. Una vez completado, intenta conectarte nuevamente mediante
ssh usuario@tu_servidor_ip.
Método 3: Comprobar la configuración del servicio SSH (sshd_config)
A veces, el problema radica en las directivas de seguridad configuradas en el archivo principal del demonio SSH en el servidor.
- Accede al servidor mediante consola física o de emergencia.
- Edita el archivo de configuración con privilegios de superusuario:
sudo nano /etc/ssh/sshd_config - Busca y asegúrate de que las siguientes líneas estén activas y descomentadas (sin el símbolo # al inicio):
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys - Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración:
sudo systemctl restart ssh