Linux

GPG error NO_PUBKEY en Ubuntu y Debian: cómo solucionarlo

Terminal de Linux mostrando comandos de actualización y errores de clave pública GPG.

El error GPG error: NO_PUBKEY ocurre cuando el gestor de paquetes APT no puede verificar la firma digital de un repositorio porque no dispone de la clave pública correspondiente. La solución consiste en identificar el identificador de la clave faltante e importarla manualmente al llavero de confianza del sistema.

Qué significa el error

Este mensaje aparece al ejecutar sudo apt update. El sistema intenta descargar la lista de paquetes de un repositorio externo, pero al verificar la integridad de los archivos, detecta que la firma no coincide con ninguna clave pública almacenada en el sistema. Es un mecanismo de seguridad para evitar que instales software malicioso o modificado. Afecta principalmente a usuarios que añaden repositorios de terceros (PPA, repositorios de software propietario como Docker, Google Chrome o VS Code) y no importan correctamente su clave de autenticación.

Causas más habituales

  • Repositorio añadido manualmente: Has añadido una fuente de software sin importar previamente su clave GPG.
  • Clave caducada o revocada: El mantenedor del repositorio ha cambiado la clave pública y la versión local ha quedado obsoleta.
  • Corrupción del llavero de claves: El archivo trusted.gpg o el directorio /etc/apt/trusted.gpg.d/ presentan errores de escritura o lectura.
  • Cambio de versión de distribución: Al actualizar Ubuntu o Debian, algunas claves de terceros se desconfiguran o pierden su enlace con el gestor de paquetes.

Antes de empezar

Asegúrate de tener acceso de superusuario (root) mediante sudo. No es necesario realizar una copia de seguridad completa del sistema, pero sí es recomendable mantener tu lista de repositorios limpia. Si has tenido otros problemas recientemente, consulta cómo solucionar el error de actualización en APT de Ubuntu y Debian para descartar fallos de red o configuración general antes de manipular las claves.

Solución 1: Importar la clave faltante con apt-key

Esta es la forma tradicional de añadir claves. Primero, identifica el código de 8 caracteres que aparece tras el error NO_PUBKEY en tu terminal. Supongamos que el error indica NO_PUBKEY 12345678ABCDEFGH.

  1. Abre tu terminal y ejecuta el siguiente comando reemplazando el código por el tuyo:
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 12345678ABCDEFGH
  2. Espera a que el sistema confirme la importación (debería aparecer un mensaje indicando imported).
  3. Ejecuta sudo apt update para verificar que el error ha desaparecido.

Este método funciona porque conecta directamente con el servidor de claves de Ubuntu, busca la huella digital asociada a ese ID y la añade al almacén de confianza del sistema. Es efectivo para la gran mayoría de repositorios estándar.

Solución 2: Descargar la clave mediante wget y guardarla en keyrings

Si el servidor de claves de Ubuntu no responde o la clave no está allí, puedes descargarla directamente desde el sitio web del proveedor del software. Este método es más preciso para repositorios específicos como los de Docker o Microsoft y utiliza los estándares modernos de Debian.

  1. Busca en la documentación oficial del repositorio la URL de su archivo .gpg o .asc.
  2. Descarga y convierte la clave al formato binario adecuado ejecutando en tu terminal:
    wget -qO- https://url-de-la-clave.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/nombre-clave.gpg > /dev/null
  3. Abre el archivo de configuración de tu repositorio ubicado en /etc/apt/sources.list.d/ usando un editor de texto como nano:
    sudo nano /etc/apt/sources.list.d/tu-repositorio.list
  4. Añade la opción [signed-by=/usr/share/keyrings/nombre-clave.gpg] justo después de deb en la línea del repositorio. Guarda los cambios con Ctrl+O y sal con Ctrl+X.
  5. Ejecuta sudo apt update para comprobar que el repositorio se sincroniza correctamente.

Al usar signed-by, le indicas a APT exactamente qué clave debe usar para ese repositorio concreto, evitando conflictos con otras claves del sistema y cumpliendo con las políticas de seguridad actuales.

Solución 3: Reparar el llavero de claves dañado

Si recibes errores de gpg: keyserver receive failed o problemas de permisos, es posible que el archivo de claves esté corrupto. Puedes intentar regenerar el acceso.

  1. Crea un directorio temporal para trabajar:
    mkdir ~/gpg-fix && cd ~/gpg-fix
  2. Exporta tus claves actuales para no perder las que funcionan:
    sudo apt-key exportall > keys.txt
  3. Elimina el llavero actual si presenta fallos graves de lectura:
    sudo rm /etc/apt/trusted.gpg
  4. Reinstala el paquete oficial de claves de tu distribución:
    sudo apt install --reinstall ubuntu-keyring

Este proceso limpia las entradas corruptas que impiden que APT lea correctamente la base de datos de firmas. Tras esto, deberás reimportar manualmente las claves de los repositorios de terceros que necesites.

Solución 4: Importar claves desde los servidores de llaves GPG OpenPGP

Cuando la clave no se encuentra en el servidor predeterminado de Ubuntu, puedes recurrir a servidores de claves globales alternativos utilizando directamente la utilidad gpg.

  1. Ejecuta el siguiente comando especificando un servidor de confianza y el identificador de la clave:
    gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 12345678ABCDEFGH
  2. Exporta la clave obtenida al directorio de confianza del sistema APT:
    gpg --export 12345678ABCDEFGH | sudo tee /etc/apt/trusted.gpg.d/repositorio-extra.gpg > /dev/null
  3. Actualiza la lista de paquetes con sudo apt update.

Este procedimiento fuerza la consulta a través del puerto 80, lo que ayuda a sortear restricciones de cortafuegos corporativos o domésticos que bloquean el puerto por defecto 11371 de GPG.

Solución 5: Limpieza profunda y migración a fuentes con signed-by

Si tu sistema arrastra configuraciones heredadas de versiones anteriores de Ubuntu o Debian, la acumulación de claves en archivos globales puede generar conflictos constantes.

  1. Identifica los archivos obsoletos en /etc/apt/trusted.gpg.d/.
  2. Haz una copia de seguridad y elimina aquellos archivos de claves de repositorios que ya no utilices.
  3. Reemplaza las entradas antiguas en /etc/apt/sources.list añadiendo la ruta explícita de la clave mediante signed-by para cada repositorio activo.
  4. Actualiza las listas con sudo apt update.

Esta solución previene futuros errores de claves duplicadas o no encontradas al aislar cada dependencia criptográfica en su propio archivo dedicado.

Cómo comprobar que se ha solucionado

La prueba definitiva es ejecutar sudo apt update en la terminal y revisar detenidamente la salida por pantalla. Si el proceso finaliza sin ninguna línea que comience por W: GPG error o Err: relacionada con la clave faltante, el sistema ha verificado correctamente las firmas. Además, puedes verificar que la clave se ha integrado correctamente listando el contenido de /usr/share/keyrings/ o ejecutando sudo apt-key list si utilizas versiones anteriores. Si aún persisten advertencias sobre otros repositorios, revisa si hay más claves caducadas o si alguno de los orígenes de software debe ser depurado.

Si nada de lo anterior funciona

Si sigues viendo errores de firma, revisa si el repositorio en cuestión ha cerrado o si la URL en tu archivo /etc/apt/sources.list es correcta. A veces, el problema no es la clave, sino que el servidor remoto no está disponible o ha cambiado su estructura. Consulta cómo solucionar el error Temporary Failure in Resolving por si el problema fuera de resolución DNS impidiendo la descarga de la clave. Si el error persiste, elimina la línea del repositorio conflictivo en /etc/apt/sources.list o en los archivos dentro de /etc/apt/sources.list.d/ para restaurar la estabilidad del sistema.

¿Es seguro ignorar este error?

No. Ignorar el error significa que APT không puede verificar la autenticidad de los paquetes. Podrías estar instalando software modificado que comprometa la seguridad de tu sistema. Siempre debes añadir la clave pública correcta.

¿Por qué apt-key está marcado como obsoleto?

Las versiones recientes de Debian y Ubuntu han marcado apt-key como obsoleto porque gestiona las claves de forma global y menos segura. La tendencia actual es usar el parámetro signed-by en los archivos de configuración de los repositorios para aislar cada clave.

¿Puedo usar la misma clave para todos los repositorios?

Técnicamente sí, pero no es recomendable. Cada desarrollador firma sus paquetes con una clave privada única. Usar una clave global simplifica la gestión, pero reduce el aislamiento de seguridad entre diferentes fuentes de software.

¿Qué hago si el repositorio no proporciona la clave?

Si un repositorio no tiene una clave pública disponible, es una señal de alerta sobre su seguridad. Contacta con el mantenedor del repositorio o, preferiblemente, busca una fuente alternativa y oficial para el software que intentas instalar.

¿Cómo puedo saber a qué repositorio pertenece una clave NO_PUBKEY?

Puedes buscar el identificador de 8 caracteres en buscadores especializados de claves GPG o revisar los archivos añadidos recientemente en el directorio /etc/apt/sources.list.d/ para correlacionar la URL del proveedor con el error devuelto por la terminal.

¿Qué diferencia hay entre añadir la clave a trusted.gpg.d y usar signed-by?

Añadir la clave a trusted.gpg.d la hace accesible de forma global para cualquier repositorio del sistema, lo cual es menos seguro. El parámetro signed-by restringe el uso de esa clave exclusivamente al repositorio especificado, aislando posibles vulnerabilidades.