Introducción
Uno de los dolores de cabeza más comunes para los administradores de sistemas y desarrolladores que trabajan con servidores Linux es encontrarse con el frustrante mensaje Permission denied (publickey) al intentar conectarse mediante SSH. Este fallo impide el acceso remoto y suele ocurrir tras una nueva configuración, un cambio de claves o una actualización del sistema. Afortunadamente, tiene solución si se revisan los puntos clave de autenticación.
Causas principales del error Permission Denied en SSH
El protocolo SSH es muy estricto con la seguridad. Las razones más habituales por las que falla la autenticación por clave pública son:
- Permisos incorrectos en el directorio
.ssho en el archivoauthorized_keysdel usuario. - La clave pública no ha sido copiada correctamente en el servidor remoto.
- El servicio SSH en el servidor (
sshd) tiene deshabilitada la autenticación por clave pública en su configuración. - Estás intentando conectar con el usuario equivocado o usando una clave privada que no coincide.
Método 1: Corregir los permisos de archivos y carpetas SSH
El motivo número uno de este error son los permisos demasiado abiertos en el servidor. Linux rechaza utilizar claves si cualquier usuario puede leerlas.
- Conéctate al servidor mediante la consola física o un método de rescate alternativo.
- Ejecuta el siguiente comando para asegurar que la carpeta
.sshtenga permisos 700:chmod 700 ~/.ssh - Asegúrate de que el archivo
authorized_keystenga permisos 600:chmod 600 ~/.ssh/authorized_keys - Verifica que el propietario de la carpeta sea el usuario correcto:
chown -R $USER:$USER ~/.ssh
Método 2: Verificar la configuración del demonio SSH (sshd_config)
Si los permisos son correctos, es posible que el archivo de configuración del servidor SSH esté bloqueando este tipo de acceso.
- Abre el archivo de configuración con privilegios de administrador:
sudo nano /etc/ssh/sshd_config - Busca las siguientes directivas y asegúrate de que estén descomentadas y configuradas así:
PubkeyAuthentication yesyAuthorizedKeysFile .ssh/authorized_keys - Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración:
sudo systemctl restart sshosudo systemctl restart sshd
Método 3: Depurar la conexión con el modo verbose
Si el problema persiste, necesitas saber exactamente qué está fallando durante el intercambio de claves.
- Ejecuta el comando de conexión SSH añadiendo la bandera
-v(verbose) o-vvvpara obtener máxima información:ssh -vvv usuario@tu_servidor_ip - Revisa las líneas de salida para identificar si el cliente no encuentra la clave privada local o si el servidor la rechaza explícitamente.
- Añade tu clave local al agente SSH si es necesario ejecutando:
ssh-add ~/.ssh/id_rsa