Introducción al error Permission denied (publickey) en Linux
Uno de los problemas más frustrantes para los administradores de sistemas y desarrolladores que utilizan Linux es intentar conectarse a un servidor remoto mediante SSH y recibir el temido mensaje: Permission denied (publickey). Este error indica que el servidor ha rechazado la autenticación basada en claves criptográficas, impidiendo el establecimiento de la sesión segura.
Causas principales del fallo de autenticación SSH
El error de permisos denegados en SSH suele estar relacionado con una configuración incorrecta en el cliente o en el servidor. Las causas más comunes incluyen:
- Permisos inadecuados en el directorio
~/.ssho en los archivos de claves autorizadas. - La clave privada correcta no se está cargando en el agente SSH.
- El archivo
sshd_configen el servidor tiene deshabilitada la autenticación por clave pública. - El archivo
authorized_keysno contiene la clave pública correspondiente.
Método 1: Corregir los permisos de archivos y carpetas SSH
Linux es extremadamente estricto con los permisos de seguridad en el directorio home del usuario. Si los permisos son demasiado abiertos, SSH denegará el acceso por motivos de seguridad. Sigue estos pasos en tu máquina local y remota:
- Abre tu terminal de Linux.
- Ejecuta el siguiente comando para asegurar que tu carpeta .ssh tiene permisos 700:
chmod 700 ~/.ssh - Establece los permisos correctos para la clave privada (ej. id_rsa):
chmod 600 ~/.ssh/id_rsa - Establece los permisos correctos para el archivo de claves autorizadas en el servidor:
chmod 600 ~/.ssh/authorized_keys
Método 2: Verificar y añadir la clave privada al agente SSH
A veces, tu cliente SSH no sabe qué clave utilizar para autenticarse. Puedes forzar al agente SSH a cargar tu clave ejecutando las siguientes instrucciones:
- Inicia el agente SSH en segundo plano:
eval "$(ssh-agent -s)" - Añade tu clave privada predeterminada o específica:
ssh-add ~/.ssh/id_rsa - Verifica que la clave se haya añadido correctamente listándola con:
ssh-add -l
Método 3: Comprobar la configuración del servidor SSH (sshd_config)
Si el problema persiste, es probable que debas revisar el archivo de configuración del demonio SSH en el servidor remoto.
- Accede al servidor mediante la consola de rescate o un método alternativo y edita el archivo de configuración:
sudo nano /etc/ssh/sshd_config - Asegúrate de que las siguientes directivas estén descomentadas y configuradas correctamente:
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys - Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración:
sudo systemctl restart sshosudo systemctl restart sshd