Introducción al error Permission Denied (publickey) en SSH
Uno de los problemas más comunes y frustrantes a los que se enfrentan los administradores de sistemas y desarrolladores al trabajar con servidores Linux es el temido mensaje Permission denied (publickey) al intentar conectarse mediante SSH. Este error ocurre cuando el servidor rechaza la clave de autenticación que proporciona el cliente, impidiendo el establecimiento de una sesión segura. Afortunadamente, con los pasos adecuados, es posible identificar la causa raíz y solucionarla en pocos minutos.
Causas principales del fallo de autenticación SSH
Antes de aplicar cualquier solución, es fundamental entender por qué se produce este fallo en sistemas basados en Linux como Ubuntu, Debian o CentOS:
- Permisos incorrectos en el directorio
~/.ssho en el archivoauthorized_keys. - La clave pública local no ha sido copiada correctamente al servidor remoto.
- El servicio SSH en el servidor (
sshd) tiene deshabilitada la autenticación por clave pública en su archivo de configuración. - Estás intentando autenticarte con el usuario incorrecto o la clave privada no se está cargando en el agente SSH.
Método 1: Corregir los permisos de archivos y carpetas SSH
El motivo más frecuente de este error es que Linux es extremadamente 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, el servidor rechasará la conexión por seguridad.
- Accede a tu servidor utilizando un método alternativo (como la consola de rescate del proveedor de hosting).
- Ejecuta el siguiente comando para asegurar que el directorio
.sshtenga permisos 700:chmod 700 ~/.ssh - Establece los permisos correctos (600) para el archivo de claves autorizadas:
chmod 600 ~/.ssh/authorized_keys - Asegúrate de que el propietario del directorio y los archivos sea el usuario correcto:
chown -R $USER:$USER ~/.ssh
Método 2: Verificar y copiar correctamente la clave pública al servidor
Si la clave no está registrada en el servidor, la autenticación fallará. Debes asegurarte de transferir tu clave pública correctamente desde tu máquina local.
- En tu máquina local, genera un par de claves si aún no lo has hecho:
ssh-keygen -t rsa -b 4096 - Utiliza la herramienta
ssh-copy-idpara enviar tu clave pública al servidor remoto de forma automatizada:ssh-copy-id usuario@tu_servidor_ip - Si el puerto SSH ha sido modificado, indícalo explícitamente:
ssh-copy-id -p 2222 usuario@tu_servidor_ip
Método 3: Revisar la configuración del demonio SSH en el servidor (sshd_config)
A veces, el problema radica en la configuración global del servidor SSH, la cual puede tener deshabilitada la autenticación por clave o requerir parámetros específicos.
- Abre el archivo de configuración del servidor con un editor de texto con privilegios de root:
sudo nano /etc/ssh/sshd_config - Busca las siguientes directivas y asegúrate de que estén descomentadas y configuradas de esta manera:
PubkeyAuthentication yesyAuthorizedKeysFile .ssh/authorized_keys - Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración:
sudo systemctl restart ssh(osudo systemctl restart sshdsegún tu distribución).