OCULTAR MENU LATERAL >>

Corregir error de claves públicas GPG en los repositorios de Ubuntu

Este error es frecuente para los usuarios de Ubuntu que intentamos sacar el máximo partido al uso de repositorios ajenos a la distribución oficial. Su solución está muy extendida en la red, pero he decidido añadirla al blog para tenerla más a mano.

Se produce cuando, al intentar actualizar, recibimos un mensaje similar a este:
W: Error de GPG: http://deb.playonlinux.com maverick Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY E0F72778C4676186
La llave o clave pública es un código que sirve para encriptar/desencriptar la información recibida desde el repositorio y, además, para firmar digitalmente el software que allí se encuentra. En resumen, podemos explicar que, al guardar en nuestro equipo la clave pública de un determinado repositorio (o distribuidor) indicamos que confiamos en él y nos aseguramos de que los paquetes recibidos son auténticos. Para ello se comprueba si la clave pública que acompaña a la información descargada coincide con la que hay en nuestro equipo local.

Si en nuestro equipo local no se encuentra la clave que acompaña a la descarga, se nos indica dicha clave mediante el error mencionado. Lo que nos está diciendo el mensaje es que no tenemos la clave pública del repositorio del que intentamos descargar. Por tanto, este error puede ocurrir:
  • Al instalar un nuevo repositorio cuyas claves públicas no fueron añadidas
  • Cuando en cualquiera de los repositorios instalados con antelación han cambiado dichas claves debido, por ejemplo, a que haya sido comprometida la seguridad de la clave o a que hayan habido cambios entre los distribuidores.
  • Cuando los ficheros de almacenamiento de claves de nuestro equipo han sido manipulados
  • ...
Ahora veamos como se soluciona.

si nos encontramos intentando actualizar desde una Terminal, posiblemente la solución que se nos ofrezca sea ejecutar el comando "apt-get update". Pero habitualmente esto no sirve de nada. La solución más habitual es:
  1. Apuntamos en algún lugar la clave que se nos indica en el mensajede error (por ejemplo, para el mensaje del inicio del post serían "E0F72778C4676186").
  2. Abrimos una Terminal (aplicaciones->Accesorios->Terminal) si todavía no la teníamos abierta.
  3. Obtenemos la clave pública de los servidores oficiales que controlan la asignación y distribución de las mismas:
    NOTA: Podemos realizar esta misma acción utilizando tan sólo los últimos 8 dígitos de la clave.
     ~$ gpg --recv-keys --keyserver keyserver.ubuntu.com CLAVE-APUNTADA
    Donde CLAVE-APUNTADA es el número que apuntamos en el primer paso.

    Comprobamos que la clave ha sido importada con éxito. Por ejemplo para la clave anterior devolverá un mensaje parecido a este:
    gpg: solicitando clave C4676186 de hkp servidor keyserver.ubuntu.com
    gpg: clave C4676186: clave pública "PlayOnLinux Packaging (PlayOnLinux packaging keys) " importada
    gpg: Cantidad total procesada: 1
    gpg:               importadas: 1
    
  4. A continuación, añadimos la clave a nuestro gestor local de paquetes para que pueda utilizarla: NOTA:Si queremos podemos realizar lo mismo utilizando tan sólo los últimos 8 dígitos de la clave.
     ~$ gpg --export --armor CLAVE-APUNTADA | sudo apt-key add -
    Si se hizo correctamente devolverá el mensaje "OK".
  5. Por último, actualizamos la información contenida en nuestro gestor de paquetes para que la clave esté disponible.
    sudo apt-get update
Y con eso el problema quedará solventado. Recuerda que si recibes este error en más de un repositorio será necesario repetir el proceso para cada uno de ellos.


Salu2,
elSant0

ALGUNOS ARTICULOS RELACIONADOS

13 comentarios:

Anónimo dijo...

Hola santO soy Alan.
Muy buen tutorial, me sirvió de maravilla.
Muchas Gracias.

rsavo dijo...

Gracias !! Como siempre en Ubuntu, es mucho mas fácil de lo que pensaba. Te agrego a mi feed de Google Reader :-) Un saludo desde Argentina !!

elSant0 dijo...

Bienvenido rsavo ;)

Salu2

Anónimo dijo...

bárbaro asi es....
por fin me actualice

Anónimo dijo...

Claro y conciso, muy bueno para los que como yo comenzamos a explorar linux. Gracias

juancito dijo...

Muy bueno, y muy claro. Muchas gracias.
Voy a intentar hacer un script para automatizarlo ya que estoy empezando a leer algo de bash scripting.
Saludos.

elSant0 dijo...

juancito@ Gracias a ti por darlas.
Por cierto, si quieres puedes compartir tu script por aquí para que los lectores lo usen.

Salu2

juancito dijo...

Bueno, como lo prometido el script anda, pero ya no me faltan claves para probarlo.
Pense en borrar algunas pero me dio pereza ;)
Si alguien lo puede probar y mandar su devolucion, o si se animan a mejorarlo es bienvenido, sobretodo con la interactividad con el usuario q le falta como avisar cuantas claves fueron actualizadas al final de su ejecución.

#!/bin/bash
#:Descripcion: Script para descargar claves públicas faltantes ('d.c.p.f.')
#:Autor: Juancito "BiMan"
#:Version: 1.0 <2011>
#:F. de Inicio: 22/10/2011

#:Pendientes:
#:P1-Agregar funcionalidad "Obtencion automatica de claves faltantes" (implementarla con 'sudo apt-get update | grep...'(Solucionado:27/10/2011)

#:Mejoras Pendientes:
#:MP1-Des-harcodear servidor de claves publicas
#:MP2-Colorear clavep en el STDOUT
#:MP3-Agregar mas interactividad con el usuario, avisar en caso de no tener éxito

#:Bugs:
#:B1-Si fracasa la obtencion de la clave no modifica el comportamiento del script.

logdeclaves=/tmp/clavesfaltantes; # Archivo de almacenamiento temporal
sudo apt-get update 2> $logdeclaves;
for clavep in $(grep "NO_PUBKEY" $logdeclaves |sed "s/.*NO_PUBKEY //")
do echo -e "Obteniendo clave: $clavep"
gpg --recv-keys --keyserver keyserver.ubuntu.com $clavep
gpg --export --armor $clavep | apt-key add -

done

# rm $logdeclaves # Para eliminar el archivo de almacenamiento temporal al concluir el script, se debe descomentar esta línea.

juancito dijo...

PD: Ah! un insignificante aporte a tu post original:
La clave pública, estrictamente hablando, sirve sólo para encriptar, mientras que para desencritar se usa la clave privada.
Por eso la clave pública se comparte sin temor a través de la red.
Saludos cordiales.

elSant0 dijo...

juancito@ Muchas gracias por el script. A ver si en los próximos días tengo un poco de tiempo y lo pruebo. Y con tu permiso, si funciona (que seguro que sí ;P), lo añado al propio post como información adicional.

La diferencia entre "clave pública" y "clave privada" no la he nombré en el post inicialmente para evitar complicar más las cosas a los usuarios noveles, pero también es cierto que podría llevar a confusión. Cuando revise tu script aprovecharé para corregir el post también.

Muchas gracias y un saludo. Gente como tu sois quienes hacéis grandes humildes blogs como este.

salu2

Anónimo dijo...

Gracias

Unknown dijo...

Ayuda no me sale nada al ingresar en penultimo paso (4) que puedo hacer?

Publicar un comentario

Escribe aquí tus valoraciones, dudas, sugerencias,... Son sólo unos instantes y ayuda a mejorar el blog.