Cómo evitar el puerto hkp saliente bloqueado para claves apt

35

Estoy usando Ubuntu 9.10 y necesito agregar algunos repositorios aptos. Desafortunadamente, recibo mensajes como este cuando ejecuto sudo apt-get update:

W: GPG error: http://ppa.launchpad.net karmic Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5A9BF3BB4E5E17B5
W: GPG error: http://ppa.launchpad.net karmic Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 1DABDBB4CEC06767

Entonces, necesito instalar las claves para estos repositorios. Bajo 9.10 ahora tenemos la opción de hacer esto:

sudo add-apt-repository ppa:nvidia-vdpau/ppa

Vea este artículo de ayuda de Ubuntu para más detalles.

Esto es genial, excepto que lo estoy ejecutando en una estación de trabajo detrás de un firewall que bloquea las conexiones salientes a casi todos los puertos, excepto los requeridos por las secretarias que ejecutan Windows e IE.

El puerto en cuestión aquí es el servicio hkp, puerto 11371.

Parece que hay formas de descargar claves manualmente e instalarlas en el llavero de apt. Incluso puede haber una manera de usar add-apt-repository o wget o algo así para descargar una clave desde un servidor alternativo que la haga disponible en el puerto 80.

Sin embargo, todavía no he encontrado un conjunto conciso de pasos para hacerlo. Lo que estoy buscando es:

  1. Cómo encontrar una clave pública para un paquete apt (recomendaciones de recursos que tienen estos, y / o consejos para buscar. Buscar el hash clave no parece tan efectivo hasta ahora).
  2. Cómo recuperar una clave (¿se puede hacer automáticamente usando gpg o add-apt-repository?)
  3. Cómo agregar una clave al llavero de apt

Gracias por adelantado.

Encanto
fuente

Respuestas:

38

Esto se ha solucionado en la próxima versión Natty de Ubuntu: https://launchpad.net/ubuntu/natty/+source/software-properties/0.78.1

Aquellos que usan una versión anterior necesitan editar ppa.py:

sudo gedit /usr/lib/python2.6/dist-packages/softwareproperties/ppa.py

En donde dice:

keyserver.ubuntu.com

cambiar a:

hkp://keyserver.ubuntu.com:80

Ahorre, salga, entonces es de esperar que esté listo.

Phil Bradley
fuente
1
Impresionante - resolvió mi problema!
Fedearne
14
El 10.10, en lugar de editar este archivo fuente, simplemente podría llamarsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys KEY_HASH
l0b0
hkp://keyserver.ubuntu.com:80funciona en 10.04 también.
bd808
1
+1 para uso--keyserver hkp://keyserver.ubuntu.com:80
rogeriolino
19
sudo apt-key adv --keyserver keyserver.ubuntu.com --keyserver-options http-proxy=http://proxy:port --recv-keys KEYID
usuario46707
fuente
13

Aquí hay una solución alternativa que utilicé:

Me conecté a un servidor Linux en el mundo libre más allá de nuestro firewall corporativo, e hice esto:

gpg --keyserver keyserver.ubuntu.com --recv 1DABDBB4CEC06767 && gpg --export --armor 1DABDBB4CEC06767

Luego, en mi estación de trabajo, ejecuté esto y pegué el resultado del comando anterior (la clave pública) en el stdin, seguido de control-D:

sudo apt-key add -

Entonces pude correr sudo apt-get updatesin problemas.

Todavía creo que tiene que haber una mejor manera, idealmente algo que pueda escribir.

Encanto
fuente
"Me conecté a un servidor Linux en el mundo libre" No es muy probable que uno pueda hacer esto en caso de que incluso hkp esté bloqueado.
gertvdijk
^ tal vez suponiendo que esté viviendo en un régimen represivo y no en algún departamento bizantino de TI. Puedo usar SSH en cualquier lugar que quiera cuando estoy en una VPN, pero sin paquetes DNS (y aparentemente sin HKP). Esto es justo lo que necesitaba.
Kingdon
8

Tengo otra solución aquí que podría ser útil si no puede encontrar otro servidor Linux fuera de su red como proxy. Simplemente envíe un correo electrónico a "[email protected]" como asunto como "get 0x1DABDBB4CEC06767". Pero probablemente aún no pueda escribir un script simple para automatizar esto.

Roger Choi
fuente
5

Puede ir al sitio web del servidor de claves, por ejemplo, http://wwwkeys.eu.pgp.net/ Busque la firma de la clave (debe agregar 0x a la firma hexadecimal), es decir, 0x1DABDBB4CEC06767.

Haga clic en el enlace que recibirá y pegue el texto en un archivo en la máquina, es decir

cat > <filename>

[PASTE]

[Ctrl-C]

Luego

apt-key add <filename>

Esto funcionó bien para mi; parece que mi proxy de trabajo bloquea muchos puertos "no estándar".

CJBrew
fuente
Esta es la única forma que funcionó para mí. Mi proxy está bloqueando fuertemente el protocolo hkp, e incluso si uso el puerto 80, gpg aún agota el tiempo de contacto con un servidor. De esta manera finalmente pude agregar la clave.
Alexander Amelkin
4

Encontré una forma ordenada de hacerlo en un solo comando a través del puerto 80, que siempre está abierto para el tráfico de www.

http://gurrier.wordpress.com/2010/10/02/downlolading-repo-keys-from-behind-a-corporate-firewall/

Tony
fuente
2
apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys ...
vorburger
1
Hola y bienvenidos al superusuario. Al responder preguntas, responda a la pregunta con la solución en la respuesta misma. No hay garantía de que el sitio al que se refirió lo mantendrá en funcionamiento y si se cae, su respuesta será inútil.
Mogget
2

Una solución simple es:

sudo add-apt-repository --keyserver hkps://keyserver.ubuntu.com:443 some_ppa

El servidor de seguridad no bloquearía el https seguro (443 saliente).

Thien Pham
fuente
1

Simplemente uso ssh para reenviar el puerto a un host externo y luego ejecuto el apt-add-repocomando.

ssh -fqTnN -D 11371 <user@host>
Thermionix
fuente
-1

Tuve el mismo problema con gpg. La solución para agregar el puerto al nombre del servidor funcionó editando mi ~/.gnupg/gpg.confarchivo. Sin embargo, todavía voy a pedirle a nuestro administrador de sistemas que abra el puerto de salida 11371, por lo que no tengo que preocuparme por esto nuevamente.

Patrick Salami
fuente
El puerto? ¿Cómo funciona la especificación del puerto (11371) en la configuración alrededor del firewall?
0xC0000022L