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 encontrarse con el mensaje Permission denied (publickey) al intentar conectarse a un servidor remoto mediante SSH. Este error ocurre generalmente cuando el servidor rechaza la clave de autenticación o cuando los permisos de los archivos de configuración y directorios SSH no son los correctos.
Causas Principales del Fallo de Autenticación SSH
Las razones más comunes por las cuales se genera este error en distribuciones basadas en Debian, Ubuntu o CentOS son:
- Permisos incorrectos en el directorio
.ssho en el archivoauthorized_keys. - La clave pública no ha sido copiada correctamente en el servidor remoto.
- El servicio SSH en el servidor tiene deshabilitada la autenticación por clave pública.
- Estás intentando autenticarte con un usuario incorrecto o la clave privada no se está cargando en el agente SSH.
Método 1: Corregir los Permisos de Archivos y Directorios SSH
El demonio de SSH (OpenSSH) es sumamente estricto con los permisos de seguridad. Si el directorio .ssh o el archivo authorized_keys tienen permisos de escritura para el grupo o otros usuarios, la conexión será rechazada automáticamente.
- Accede a tu servidor físico o mediante otra vía de emergencia.
- Ejecuta el siguiente comando para ajustar los permisos del directorio
.ssh:chmod 700 ~/.ssh - Asegúrate de que el archivo de claves autorizadas tenga permisos restrictivos:
chmod 600 ~/.ssh/authorized_keys - Verifica que el propietario del directorio sea el usuario correcto:
chown -R $USER:$USER ~/.ssh
Método 2: Verificar y Añadir la Clave Pública Correctamente
A veces, la clave no se copió íntegramente o el archivo authorized_keys está corrompido.
- Desde tu máquina local, genera una nueva clave si es necesario ejecutando:
ssh-keygen -t rsa -b 4096 - Copia la clave al servidor remoto usando la utilidad estándar:
ssh-copy-id usuario@tu-servidor-ip - Si el puerto SSH es diferente al 22, especifícalo así:
ssh-copy-id -p 2222 usuario@tu-servidor-ip
Método 3: Revisar la Configuración del Servidor SSH (sshd_config)
Si los pasos anteriores no funcionan, el problema puede residir en la configuración global del servicio SSH en el servidor.
- Abre el archivo de configuración con privilegios de superusuario:
sudo nano /etc/ssh/sshd_config - Busca y asegúrate de que las siguientes directivas estén habilitadas y descomentadas:
PubkeyAuthentication yesyAuthorizedKeysFile .ssh/authorized_keys - Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración:
sudo systemctl restart sshd