sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 命令返回错误

nya*_*mka 33 linux public-key ubuntu mongodb

我正在尝试在 Ubuntu 12 上安装 Mongodb,但是当我运行此命令时:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
返回以下错误:

找不到 keyserver.ubuntu.com 主机
gpgkeys:HTTP 获取错误 7:无法连接:没有这样的文件或目录
gpg:找不到有效的 openPGP 数据
gpg:进程总数:0

我在 Iptables 上关闭了防火墙,但它不起作用。有什么想法吗?

Ada*_*m C 40

这实际上可能不是查找密钥服务器的问题,这是错误所暗示的。apt-key 命令调用 gpg,后者尝试访问密钥服务器。显然 gpg 中存在一个错误,如果密钥服务器没有您请求的密钥,则 gpg 会将其误解为“找不到主机”。

无响应的密钥服务器很可能会做同样的事情,而且我已经看到密钥服务器被阻止的环境(公司防火墙规则),因此如果有上游防火墙您无权访问,这可能是您的根本原因到。

仅供参考,密钥在那里,密钥服务器目前正在为我响应:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /tmp/tmp.rh1myoBdSE --trustdb-name /etc/apt//trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv 7F0CEB10
gpg: requesting key 7F0CEB10 from hkp server keyserver.ubuntu.com
gpg: key 7F0CEB10: "Richard Kreuter <richard@10gen.com>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1
Run Code Online (Sandbox Code Playgroud)

可能是端口有问题(这是我最后一次遇到公司防火墙问题),因此请尝试在标准 HTTP 端口 (80) 上执行此操作,看看是否可以解决问题:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
Run Code Online (Sandbox Code Playgroud)

  • “在标准 HTTP 端口 (80) 上执行此操作”非常棘手!tks (4认同)
  • 警告:如果没有 SSL,您可能会受到 [MitM 攻击](https://en.wikipedia.org/wiki/Man-in-the-middle_attack) 的攻击,该攻击为您提供指纹具有相同最后八个字符的密钥([攻击密钥示例](https://keyserver.ubuntu.com/pks/lookup?search=0x7F0CEB10&amp;op=vindex))。这样的密钥甚至可能不会公开共享,因此您永远不会知道自己已被盗。为了防止来自公开共享密钥的此类攻击,[Debian 的密钥服务器](https://keyring.debian.org/) 有一项政策,规定“只有 Debian 密钥环中的密钥......将由该服务器返回” (2认同)

小智 22

我遇到了同样的问题,因为我的机器在公司代理后面。添加gpg --keyserver-option http-proxy使诀窍。好像:

sudo apt-key adv --keyserver-options http-proxy=<myProxy> --keyserver keyserver.ubuntu.com --recv 7F0CEB10
Run Code Online (Sandbox Code Playgroud)


DKo*_*DKo 22

如果您使用代理,例如公司的代理,那么可能唯一的方法是手动输入,这非常简单。跑:

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

并获取 pub_key 的 id。然后转到http://keyserver.ubuntu.com/并以十六进制形式搜索密钥,例如,如果密钥是7936A783B,则搜索0x7936A783B。单击 pup 链接并复制密钥内容并将其保存到 txt 文件。转到终端并导航到文件并运行:

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

如果它有效,你会得到一个简单的OK反馈。添加所有密钥后,您可以运行:

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

你有它!

  • 这很整洁;也可以使用您通过“apt-key”逐字获取的 URL,如下所示:“apt-key adv --fetch-keys http://keyserver.ubuntu.com/pks/lookup?op=get&amp;search=0xD6ACA1C817B18ABC” (3认同)
  • @sxc731 – `apt-key` 手册页说:“请注意,没有执行任何检查,因此如果不小心使用,很容易完全破坏 apt-secure(8) 基础设施。” 这意味着您_真的_不想在没有 SSL 的情况下这样做。将其更改为 `--fetch-keys https://...`,您应该相当安全。 (2认同)