Introducción al error Permission denied (publickey) en Linux
Cuando trabajas con control de versiones en Linux e intentas clonar, hacer push o pull en un repositorio remoto utilizando SSH (como GitHub, GitLab o Bitbucket), es muy común encontrarse con el frustrante error Permission denied (publickey). Este problema ocurre cuando el servidor remoto rechaza tu clave pública porque no puede verificar tu identidad o porque el cliente SSH no está enviando la clave correcta.
Causas principales del fallo de autenticación SSH
Las razones más habituales por las que aparece este error en distribuciones Linux son:
- No tienes ninguna clave SSH generada en tu equipo o no está en la ruta predeterminada.
- El agente SSH (
ssh-agent) no está ejecutándose o no tiene tu clave cargada. - La clave pública correspondiente no ha sido añadida correctamente en tu cuenta de GitHub, GitLab o el servicio que utilices.
- Problemas de permisos en el directorio
~/.ssho en los archivos de claves.
Método 1: Verificar y añadir tu clave SSH al agente SSH
El primer paso es comprobar si el agente SSH está activo y si tu clave está registrada en él.
- Abre tu terminal de Linux.
- Inicia el agente SSH en segundo plano ejecutando el comando:
eval "$(ssh-agent -s)" - Añade tu clave privada predeterminada con:
ssh-add ~/.ssh/id_rsa(si utilizas una clave Ed25519, reemplazaid_rsaporid_ed25519). - Si el sistema te devuelve un error indicando que no encuentra el archivo, significa que necesitas generar una nueva clave SSH.
Método 2: Generar una nueva clave SSH y asociarla
Si no dispones de una clave o la anterior está corrupta, puedes crear una nueva credencial segura.
- Genera la clave ejecutando el siguiente comando (reemplaza el correo por el tuyo):
ssh-keygen -t ed25519 -C "tu_correo@ejemplo.com" - Pulsa Intro para aceptar la ubicación predeterminada y añade una contraseña si lo deseas (o déjala en blanco).
- Inicia el agente y añade la nueva clave:
eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519 - Muestra el contenido de tu clave pública para copiarla:
cat ~/.ssh/id_ed25519.pub - Copia el texto resultante, dirígete a la configuración de SSH en tu plataforma de Git (GitHub, GitLab, etc.) y añádela como una nueva clave pública.
Método 3: Corregir los permisos de la carpeta .ssh
Linux es muy estrictos con los permisos de los archivos de seguridad. Si los permisos de tu carpeta ~/.ssh son demasiado abiertos, SSH denegará el acceso por seguridad.
- Abre tu terminal y ejecuta los siguientes comandos para ajustar los permisos recomendados:
chmod 700 ~/.sshchmod 600 ~/.ssh/id_rsa(ochmod 600 ~/.ssh/id_ed25519según tu tipo de clave).chmod 644 ~/.ssh/id_rsa.pub(o el archivo equivalente con terminación .pub).- Verifica la conexión ejecutando:
ssh -T git@github.com(cambiando el host según corresponda). Debería saludarte con éxito y solucionar el error de forma definitiva.