¿Qué causa el error Permission denied (publickey) en SSH?
El mensaje de error Permission denied (publickey) es uno de los fallos más comunes al intentar conectarse a un servidor Linux remoto a través del protocolo SSH. Ocurre cuando el servidor rechaza las credenciales de la clave SSH o no encuentra una clave válida para autenticar la sesión del usuario.
Causas principales del fallo de autenticación
- Los permisos de la carpeta
.ssho del archivoauthorized_keysen el servidor son demasiado permisivos. - La clave pública del cliente no ha sido agregada correctamente al archivo
authorized_keysdel usuario en el servidor. - El archivo de configuración del demonio SSH (
sshd_config) tiene desactivada la autenticación por clave pública. - Se está intentando realizar la conexión especificando una clave privada incorrecta o una ruta equivocada en el cliente.
Método 1: Corregir los permisos de archivos y carpetas SSH
El servicio SSH exige permisos muy estrictos por motivos de seguridad. Si los archivos de clave son accesibles por otros usuarios del sistema, SSH rechazará la conexión.
- Accede al servidor remoto (mediante consola de rescate o contraseña si está habilitada).
- Asegúrate de que el directorio SSH tenga los permisos 700 ejecutando
chmod 700 ~/.ssh. - Cambia los permisos del archivo de claves autorizadas a 600 con el comando
chmod 600 ~/.ssh/authorized_keys. - Asegúrate de que el propietario de la carpeta sea tu usuario actual con
chown -R $USER:$USER ~/.ssh.
Método 2: Agregar correctamente la clave pública al servidor
Si la clave pública local no está registrada en el servidor, la autenticación fallará inmediatamente.
- En tu máquina local, copia tu clave pública usando el comando
ssh-copy-id usuario@ip_servidor. - Si el comando anterior no está disponible, muestra el contenido de tu clave pública local con
cat ~/.ssh/id_rsa.pub. - Copia el texto impreso y pégalo manualmente dentro del archivo
~/.ssh/authorized_keysen el servidor remoto.
Método 3: Modificar la configuración del servicio SSH
Es posible que el servidor tenga deshabilitada la autenticación por claves públicas en su fichero de configuración global.
- Abre el archivo de configuración de SSH con
sudo nano /etc/ssh/sshd_config. - Busca la directiva
PubkeyAuthenticationy asegúrate de que esté configurada enyes. - Verifica que la directiva
AuthorizedKeysFileapunte a.ssh/authorized_keys. - Guarda los cambios y reinicia el servicio SSH ejecutando
sudo systemctl restart sshdosudo systemctl restart sshen distribuciones Ubuntu/Debian.