Introducción al Error Permission Denied (publickey) en Linux
El protocolo SSH es la herramienta fundamental para la administración remota de servidores y sistemas Linux. Sin embargo, uno de los problemas más frustrantes a los que se enfrentan los administradores de sistemas y desarrolladores es el temido mensaje Permission denied (publickey) al intentar establecer una conexión. Este fallo indica que el servidor remoto ha rechazado la autenticación basada en clave pública, impidiendo el acceso a la terminal.
Causas Principales del Fallo de Autenticación SSH
Existen diversos motivos por los cuales Linux puede denegar el acceso mediante claves SSH. Entre los más comunes se encuentran:
- Permisos incorrectos en el directorio
.ssho en los archivos de claves (authorized_keys). - El agente SSH no tiene cargada la clave privada correspondiente.
- La clave pública no ha sido copiada correctamente en el servidor de destino.
- Configuración restrictiva en el archivo
sshd_configdel servidor que deshabilita la autenticación por clave pública.
Método 1: Corregir los Permisos de Archivos y Directorios SSH
El motivo más frecuente de este error son unos permisos excesivamente abiertos en el sistema de archivos del usuario. Linux es sumamente estricto con la seguridad del directorio SSH.
- Accede a tu servidor de forma local o mediante otro método de emergencia.
- Ejecuta el siguiente comando para asegurar que el directorio
.sshtenga permisos 700:chmod 700 ~/.ssh - Ajusta los permisos del archivo de claves autorizadas a 600:
chmod 600 ~/.ssh/authorized_keys - Verifica que el propietario de los archivos sea el usuario correcto:
sudo chown -R $USER:$USER ~/.ssh
Método 2: Verificar y Añadir la Clave Privada al Agente SSH
Si las claves en el servidor son correctas, el problema podría originarse en tu máquina local si el cliente SSH no está utilizando la identidad adecuada.
- Inicia el agente SSH en segundo plano ejecutando:
eval "$(ssh-agent -s)" - Añade tu clave privada predeterminada o específica con:
ssh-add ~/.ssh/id_rsa - Comprueba qué claves están cargadas actualmente en el agente mediante el comando:
ssh-add -l
Método 3: Revisar la Configuración del Servidor SSH (sshd_config)
Si las comprobaciones anteriores fallan, es posible que el demonio SSH en el servidor remoto esté bloqueando este tipo de acceso por motivos de directivas de seguridad.
- Abre el archivo de configuración con privilegios de superusuario:
sudo nano /etc/ssh/sshd_config - Busca las siguientes directivas y asegúrate de que estén habilitadas y configuradas correctamente:
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys - Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración ejecutando:
sudo systemctl restart sshosudo systemctl restart sshdsegún tu distribución de Linux.