Introducción al error Permission Denied en SSH
Uno de los problemas más frustrantes para los administradores de sistemas y desarrolladores que trabajan con servidores Linux es encontrarse con el mensaje Permission denied (publickey) al intentar conectarse mediante SSH. Este fallo de autenticación impide el acceso remoto al servidor, bloqueando cualquier tarea de despliegue o gestión.
Causas principales del fallo de claves SSH
El error ocurre generalmente porque el servidor rechaza la clave pública proporcionada por el cliente. Las causas más comunes incluyen:
- Permisos incorrectos en el directorio
.ssho en el archivoauthorized_keys. - La clave pública no está registrada correctamente en el servidor remoto.
- El servicio SSH (sshd) tiene deshabilitada la autenticación por clave pública en el archivo de configuración.
- Se está intentando usar 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
Linux es extremadamente estricto con los permisos de seguridad. Si la carpeta .ssh o sus archivos tienen permisos de escritura para el grupo o otros usuarios, el servidor rechazará la conexión por motivos de seguridad.
- Accede a tu servidor local y asegúrate de que tu carpeta personal tenga los permisos correctos ejecutando
chmod 700 ~/.ssh. - Verifica los permisos del archivo de claves autorizadas con el comando
chmod 600 ~/.ssh/authorized_keys. - Comprueba que el propietario del directorio sea el usuario correcto utilizando
chown -R $USER:$USER ~/.ssh.
Método 2: Verificar la configuración del servidor SSH (sshd_config)
Si los permisos son correctos pero el error persiste, es probable que el demonio SSH en el servidor esté configurado para no permitir accesos mediante claves.
- Abre el archivo de configuración con privilegios de superusuario:
sudo nano /etc/ssh/sshd_config. - Busca las siguientes líneas y asegúrate de que estén descomentadas y configuradas de esta manera:
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys- Guarda los cambios y reinicia el servicio SSH para aplicar la nueva configuración ejecutando
sudo systemctl restart sshosudo systemctl restart sshdsegún tu distribución.
Método 3: Depurar la conexión con el modo verbose
Si aún no puedes acceder, necesitas ver exactamente qué está fallando durante el intercambio de claves. Utiliza el modo de depuración de SSH desde tu máquina cliente:
- Ejecuta el comando de conexión añadiendo la bandera
-vo-vvvpara obtener la máxima verbosidad:ssh -vvv usuario@tu-servidor-ip. - Analiza la salida en la terminal para identificar en qué paso exacto el servidor rechaza la credencial (por ejemplo, si no encuentra la clave o si esta es ignorada).