Error de llaves públicas en Ubuntu

¿Os suena el error de esta captura de pantalla? Lo produce la herramienta de actualizaciones de Ubuntu cuando añadís un origen de software sin importar en el sistema su correspondiente llave pública, con la que poder verificar la autenticidad de las listas de paquetes que se descarga.

Para añadir una de estas llave públicas, basta con acudir a la fuente del origen de software (su página web) y allí seguramente nos explicará cómo hacerlo. Un método universal consiste en obtener la llave en un archivo y entonces cargarlo en el sistema desde la herramienta Orígenes de software, en la pestaña Autenticación.

En Ubuntu lo más habitual es añadir orígenes de los PPA de Launchpad. Cuando se añaden correctamente, la llave ya se obtiene automáticamente, pero si por algún motivo no se puede obtener o hemos añadido el origen de una forma incorrecta, recibiremos igualmente este error. Después del salto os dejo un comando con el que podréis buscar y añadir las llaves públicas que os faltan automáticamente.

sudo apt-get update |& tee /tmp/keymissing;
for key in $(grep "NO_PUBKEY" /tmp/keymissing 
| sed "s/.*NO_PUBKEY //"); do echo -e "Processing 
key: $key"; gpg --keyserver subkeys.pgp.net 
--recv $key ; gpg --export --armor $key 
| sudo apt-key add -; done

Copiad y pegad este comando en una terminal, a la que podéis acceder mediante Aplicaciones » Accesorios » Terminal, introducid vuestra contraseña y esperad un poco. ¡Solucionado!

Explicación del comando utilizado

Tal y como me comentó JFlores, es importante que no introduzcáis cualquier comando que veáis por ahí, ya que podría ser fatal para vuestro sistema. Cuando os pido que introduzcáis un comando así os estoy pidiendo que confiéis en mí: no os va a hacer nada malo.

Por eso, porque quizás pediros confianza ciega es demasiado pedir, os explicaré qué hace. Vayamos poco a poco, ya que aunque haya dicho que es un comando, realmente son varios que se van pasando datos unos a otros.

sudo apt-get update |& tee /tmp/keymissing

Con ese comando actualizamos el listado de paquetes y escribimos la salida que normalmente verías por consola en un archivo llamado /tmp/keymissing.

grep "NO_PUBKEY" /tmp/keymissing | sed "s/.*NO_PUBKEY //"

Con grep obtenemos las líneas que contienen «NO_PUBKEY», que son las que tienen el nombre de la llave que necesitamos. Esas líneas se las pasamos a sed, con el que eliminamos la parte de las líneas que no nos interesan y nos quedamos solo con los nombres de las llaves.

for key in $(...); do ... ; done

El comando anterior lo metemos dentro del $(...), de forma que se ejecuta primero, y su resultado lo coloca ahí. Entonces, para cada una de las llaves, realizará lo que está después del do. Podremos acceder a la llave con la que estamos trabajando actualmente mediante la variable key.

gpg --keyserver subkeys.pgp.net --recv $key

Con este comando pedimos a un servidor de llaves que nos envíe una llave. Como vemos se utiliza la variable key para referirse al nombre de la llave que queremos obtener.

gpg --export --armor $key | sudo apt-key add -

Por último, una vez tenemos la llave, exportamos su contenido y se lo pasamos a apt-key para añadirlo al sistema sistema de paquetes. Como estas dos últimas líneas están dentro del for, se repetirán por cada llave que nos falte.

Vía: Learning Ubuntu

Más guías y consejos

Recibe cada mañana nuestra newsletter. Una guía para entender lo que importa en relación con la tecnología, la ciencia y la cultura digital.

Procesando...
¡Listo! Ya estás suscrito