Introducción al error Permission Denied (publickey) en Linux
Uno de los problemas más frustrantes al administrar servidores o conectarse a repositorios remotos mediante SSH en entornos Linux es el temido mensaje Permission denied (publickey). Este error ocurre cuando el servidor remoto rechaza la clave pública proporcionada por tu cliente, impidiendo la autenticación. A continuación, exploraremos las causas principales y cómo solucionarlo paso a paso.
Causas principales del fallo de autenticación SSH
El rechazo de la clave pública suele deberse a fallos comunes en la configuración del cliente o del servidor. Entre las causas más frecuentes se encuentran:
- Permisos incorrectos en el directorio
.ssho en los archivos de claves. - El servicio SSH en el servidor no tiene habilitada la autenticación por clave pública.
- La clave privada correcta no está cargada en el agente SSH (
ssh-agent). - La clave pública no ha sido añadida correctamente al archivo
authorized_keysdel servidor.
Método 1: Corregir los permisos de archivos y carpetas SSH
Linux es extremadamente estricto con los permisos de seguridad. Si la carpeta .ssh o el archivo authorized_keys tienen permisos de escritura para otros usuarios, el servidor rechazará la conexión por motivos de seguridad.
- Abre tu terminal local o en el servidor afectado.
- Ejecuta el siguiente comando para ajustar los permisos del directorio
.ssh:chmod 700 ~/.ssh - Establece los permisos correctos para la clave privada (ejemplo id_rsa):
chmod 600 ~/.ssh/id_rsa - Establece los permisos correctos para el archivo de claves autorizadas:
chmod 600 ~/.ssh/authorized_keys
Método 2: Verificar y añadir la clave al agente SSH
A veces, el cliente SSH no está utilizando la clave correcta al intentar establecer la conexión. Debes asegurarte de que tu clave privada esté cargada en el agente.
- Inicia el agente SSH en segundo plano ejecutando:
eval "$(ssh-agent -s)" - Añade tu clave privada predeterminada o específica con el comando:
ssh-add ~/.ssh/id_rsa - Verifica que la clave se haya añadido correctamente listando las huellas digitales:
ssh-add -l
Método 3: Revisar la configuración del servidor SSH (sshd_config)
Si el problema persiste desde el lado del servidor, es probable que la configuración en /etc/ssh/sshd_config esté bloqueando el acceso por claves públicas.
- Accede al servidor con un usuario con privilegios root o sudo y abre el archivo de configuración:
sudo nano /etc/ssh/sshd_config - Busca y 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 sshd