Introducción
Uno de los dolores de cabeza más comunes para administradores de sistemas y desarrolladores que utilizan sistemas operativos basados en Linux es encontrarse con el temido mensaje Permission denied (publickey) al intentar establecer una conexión remota mediante SSH. Este fallo impide el acceso al servidor, bloqueando despliegues y tareas de mantenimiento esenciales.
Causas principales del error SSH Permission Denegado
El protocolo SSH es extremadamente estricto con la seguridad. Las razones más habituales por las que se genera este error incluyen:
- Permisos incorrectos en el directorio
.ssho en los archivos de llaves dentro del equipo local o remoto. - La clave pública no ha sido copiada correctamente en el archivo
authorized_keysdel servidor de destino. - El servicio SSH en el servidor remoto tiene deshabilitada la autenticación por llaves públicas en el archivo
sshd_config. - Estás intentando autenticarte con un usuario incorrecto o la llave privada no está siendo cargada por el agente SSH.
Método 1: Corregir los permisos de archivos y carpetas SSH
Los servidores Linux rechazan automáticamente las conexiones SSH si los permisos de las llaves son demasiado abiertos. Debes asegurarte de que solo tu usuario tenga privilegios de lectura y escritura.
- Abre tu terminal en el equipo cliente y ejecuta el siguiente comando para corregir los permisos de la carpeta .ssh:
chmod 700 ~/.ssh - Genera una nueva llave si es necesario usando:
ssh-keygen -t rsa -b 4096 - Accede al servidor remoto y abre el archivo de configuración con un editor de texto con privilegios de superusuario:
sudo nano /etc/ssh/sshd_config
Asegúrate de que la clave privada tenga permisos estrictos de lectura únicamente para el propietario: chmod 600 ~/.ssh/id_rsa
Si el problema persiste en el servidor remoto, conéctate por otro medio (como la consola del proveedor) y verifica que el archivo authorized_keys tenga permisos de 600: chmod 600 ~/.ssh/authorized_keys
Método 2: Verificar y copiar correctamente la clave pública al servidor
A veces, la clave no se registra adecuadamente en el servidor de destino, o el demonio SSH no la reconoce.
Utiliza la utilidad estándar ssh-copy-id para transferir tu clave pública de forma segura al servidor remoto: ssh-copy-id usuario@tu_servidor_ip
Introduce la contraseña de tu usuario cuando se te solicite. Esto añadirá automáticamente la clave al archivo correcto con los permisos adecuados.
Método 3: Revisar la configuración del servicio SSH en el servidor
Si los permisos y las llaves son correctos, es muy probable que el archivo de configuración del servidor SSH esté bloqueando el acceso por claves.
Busca las siguientes líneas y asegúrate de que estén descomentadas (sin el símbolo # al inicio) y configuradas de esta manera:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración ejecutando: sudo systemctl restart ssh o sudo systemctl restart sshd