Introducción al Error Permission Denied (publickey)
El protocolo SSH es fundamental para la administración de servidores remotos en Linux. Sin embargo, uno de los problemas más comunes a los que se enfrentan los administradores y desarrolladores es el frustrante mensaje Permission denied (publickey) al intentar conectarse mediante la terminal. Este fallo indica que el servidor remoto ha rechazado la clave de autenticación proporcionada por el cliente.
Causas Principales del Error
Las razones por las que ocurre este error suelen estar relacionadas con fallas en los permisos de los archivos de configuración, claves SSH faltantes en el agente, o bien, porque la clave pública no se encuentra registrada correctamente en el archivo authorized_keys del servidor de destino.
Método 1: Verificar y Corregir los Permisos de la Carpeta .ssh y Claves
Linux es extremadamente estricto con los permisos de seguridad. Si los directorios o archivos de claves tienen permisos de escritura para otros usuarios, el servidor SSH los rechazará automáticamente.
- Abre tu terminal local y conéctate o revisa los permisos en tu máquina.
- Ejecuta el siguiente comando para ajustar los permisos del directorio .ssh:
chmod 700 ~/.ssh - Asegúrate de que los permisos de tu clave privada sean correctos (solo lectura para el propietario):
chmod 600 ~/.ssh/id_rsa - Verifica que el archivo de claves autorizadas tenga los permisos adecuados:
chmod 644 ~/.ssh/authorized_keys
Método 2: Añadir la Clave Privada al Agente SSH
A veces, el cliente SSH no está cargando la clave privada correcta en la sesión actual, lo que provoca el fallo de autenticación.
- Inicia el agente SSH en segundo plano ejecutando:
eval `ssh-agent -s` - Añade tu clave privada por defecto al agente 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: Diagnosticar con el Modo Verbose (-v)
Si el problema persiste, es necesario conocer exactamente en qué punto falla la negociación SSH.
- Ejecuta el comando de conexión SSH añadiendo la opción
-v,-vvo-vvvpara obtener una salida detallada:ssh -v usuario@tu_servidor_ip - Revisa las líneas de la terminal para identificar si el servidor rechaza la clave por formato inválido o si está intentando usar métodos de autenticación alternativos.