
¿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









En ubuntu 9.10 se implementó esto mediante el comando sudo add-apt-repository ppa: el sistema se encargará de añadir la fuente e importar las llaves automaticamente
Exactamente, pero por si no lo has hecho así (y es complicado porque en las mismas páginas de los PPA se explica así) o si ha fallado el servidor de llaves al añadirlo (a mí me ha pasado un par de veces), luego debes añadirlos manualmente.
Gracias por el comentario! Que amplía información, podría haberlo comentado en la entrada perfectamente..
No entiendo porqué en Ubuntu hay que hacer esto manualmente!. En openSuse, p.ej., al añadir el repositorio se obtine la llave automáticamente y te pregunta si aceptas añadir ese nuevo repositorio con la identificación que se muestra.
¡No, no hay que hacerlo manualmente! Pero si lo has añadido mal o si falla el servidor de llaves al añadirlo, como ya he explicado arriba, sí.
Esto de copia y pega este comando en la consola para hacer tal o cual cosa es una buena forma de empezar a convertir linux en algo menos seguro. Entendedme, no digo que yo no haya leido el comando ni que no sea bienintencionado, sino que a medida que mas usuarios sin conocimientos avanzados utilicen linux, y más ayudas de este tipo se les brinde más inseguros estarán porque no sabrán lo que están poniendo la mayor parte de las veces. Ya se que en un artículo de este tipo no es una opción explicar cada uno de los comandos que componen el bloque de código pero sería lo correcto.
Tienes razón, pero bueno, no es tan complicado de explicar. Cuando tenga un rato añado una sección nueva explicándolo (pero seguramente no será hoy, que estoy muy liado)
Está muy bueno el truco, pero si lo llego a usar es un milagro. xD
En XUbuntu 9.10 (Linux 2.6.31-17-generic) aparece el siguiente mensaje:
[sudo] password for …: No command ‘amp’ found, but there are 16 similar ones amp: command not found
Saludos cordiales, Jorge
Vaya, es por un fallo de codificación al ponerlo en la entrada. No consigo arreglarlo. En la primera línea, donde pone |& cámbialo por |&
Es decir, borra el “amp;”
Gracias por el link a mi pagina Learning Ubuntu. Estoy muy feliz que te gusto el articulo! :D
sudo apt-get update 2> /tmp/keymissing; for key in $(grep “NO_PUBKEY” /tmp/keymissing |sed “s/.*NO_PUBKEY //”); do echo -e “nProcessing key: $key”; gpg —keyserver subkeys.pgp.net —recv $key && gpg —export —armor $key | sudo apt-key add -; done
Gracias por la información !, espero tu nueva sección, en la que describirás éstos comandos. Saludos cordiales, Jorge.
De nada :) Ya está puesta la sección. Espero que esté lo suficientemente claro, pero si dudas pregunta.
El fallo de los bloques de código con el “amp;” no lo han solucionado todavía, disculpad :S
Excelente explicación !. Ahora sí se entiende :). Sobre el problema con el código (“amp”), has probado con la etiqueta ?
Saludos cordiales ! Jorge
Me refería a las etiquetas <pre> </pre>
En el mensaje anterior las filtró. Veremos ahora, Saludos !
<pre> </pre>