如何解决 apt 密钥被阻止的出站 hkp 端口

Kie*_*ief 35 aptitude gnupg

我使用的是 Ubuntu 9.10,需要添加一些 apt 存储库。不幸的是,我在运行时收到这样的消息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
Run Code Online (Sandbox Code Playgroud)

因此,我需要为这些存储库安装密钥。在 9.10 下,我们现在可以选择这样做:

sudo add-apt-repository ppa:nvidia-vdpau/ppa
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此 Ubuntu 帮助文章

这很棒,只是我在防火墙后面的工作站上运行它,该防火墙阻止了几乎所有端口的出站连接,除了运行 Windows 和 IE 的秘书所需的端口。

这里有问题的端口是 hkp 服务,端口 11371。

似乎有办法手动下载密钥并将它们安装在 apt 的密钥环上。甚至可能有一种方法可以使用 add-apt-repository 或 wget 或其他东西从替代服务器下载密钥,使其在端口 80 上可用。

但是,我还没有找到一套简洁的步骤来这样做。我正在寻找的是:

  1. 如何找到一个 apt-package 的公钥(对拥有这些的资源的推荐,和/或搜索技巧。搜索密钥散列到目前为止似乎并不是那么有效。)
  2. 如何检索密钥(是否可以使用 gpg 或 add-apt-repository 自动完成?)
  3. 如何将密钥添加到 apt 的钥匙圈

提前致谢。

小智 39

这已在即将推出的 Natty Ubuntu 版本中修复:https : //launchpad.net/ubuntu/natty/+source/software-properties/0.78.1

使用旧版本的用户需要编辑 ppa.py:

sudo gedit /usr/lib/python2.6/dist-packages/softwareproperties/ppa.py
Run Code Online (Sandbox Code Playgroud)

它在哪里说:

keyserver.ubuntu.com
Run Code Online (Sandbox Code Playgroud)

改成:

hkp://keyserver.ubuntu.com:80
Run Code Online (Sandbox Code Playgroud)

保存,退出,然后你就可以开始了。

  • 在 10.10 上,我可以简单地调用`sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys KEY_HASH`,而不是编辑这个源文件 (14认同)

小智 19

sudo apt-key adv --keyserver keyserver.ubuntu.com --keyserver-options http-proxy=http://proxy:port --recv-keys KEYID
Run Code Online (Sandbox Code Playgroud)


Kie*_*ief 13

这是我使用的一种解决方法:

我在公司防火墙之外的自由世界中登录了一台 linux 服务器,并执行了以下操作:

gpg --keyserver keyserver.ubuntu.com --recv 1DABDBB4CEC06767 && gpg --export --armor 1DABDBB4CEC06767
Run Code Online (Sandbox Code Playgroud)

然后在我的工作站上,我运行了这个,并将上面命令的输出(公钥)粘贴到标准输入中,然后是 control-D:

sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

然后我就可以sudo apt-get update毫无问题地运行了。

我仍然认为必须有更好的方法,最好是我可以编写的脚本。


小智 8

我这里有另一种解决方法,如果您无法在网络外找到另一台 linux 服务器作为代理,这可能会很方便。只需向“pgp-public-keys@pgp.mit.edu”发送一封电子邮件,主题为“get 0x1DABDBB4CEC06767”。但是您可能仍然无法编写一个简单的脚本来自动执行此操作。


小智 5

您可以访问密钥服务器的网站,例如http://wwwkeys.eu.pgp.net/ 搜索密钥签名(您需要在十六进制签名中添加 0x)即 0x1DABDBB4CEC06767。

单击您希望获得的链接并将文本粘贴到机器上的文件中,即

cat > <filename>

[PASTE]

[Ctrl-C]
Run Code Online (Sandbox Code Playgroud)

然后

apt-key add <filename>
Run Code Online (Sandbox Code Playgroud)

这对我来说很好;看来我的工作代理阻止了很多“非标准”端口。