MongoDB GPG-无效签名


98

我正在使用以下说明在Ubuntu 14.04计算机上安装MongoDB:https//docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

所以我跑:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

然后:

echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

其次是:

sudo apt-get update

然后,我在更新结束时收到以下警告:

W:GPG错误:http ://repo.mongodb.org trusty / mongodb-org / 3.2版本:以下签名无效:BADSIG D68FA50FEA312927 MongoDB 3.2版本签名密钥

如果我忽略警告并尝试运行:

sudo apt-get install -y mongodb-org

我得到:

警告:以下软件包无法通过身份验证!
mongodb-org-shell mongodb-org-server mongodb-org-mongos mongodb-org-tools mongodb-org E:有问题,使用-y时没有--force-yes

关于如何解决的任何想法?谢谢!


5
同样的错误,也有14.04 LTS
Mike

1
麻烦的还是要在Feb'18,有以下工作的解决方案,但没有接受一个:stackoverflow.com/a/46737148/2273305 @阿萨夫-赫什科,请考虑改变你最好的答案的选择
胡克

根据docs.mongodb.com/v3.6/tutorial/install-mongodb-on-ubuntu上的官方安装文档导入密钥为我工作。截至2019sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
6

Answers:


286

通过一个命令从Ubuntu密钥服务器更新所有过期的密钥:

sudo apt-key list | \
 grep "expired: " | \
 sed -ne 's|pub .*/\([^ ]*\) .*|\1|gp' | \
 xargs -n1 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys

命令说明:

  1. sudo apt-key list -列出系统中安装的所有密钥;
  2. grep "expired: " -只保留带有过期密钥的行;
  3. sed -ne 's|pub .*/\([^ ]*\) .*|\1|gp' -提取密钥;
  4. xargs -n1 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys -通过找到过期的密钥更新Ubuntu密钥服务器中的密钥。

资源


2
这在Mint上效果很好。注意:的参数--recv-key是过期密钥。
not2qubit

太神奇了,非常感谢您,它也解决了我在其他应用程序中遇到的类似问题。我需要将其保存在文件中以备将来使用。
Yomi

12
对于几年后从“可接受的解决方案”中看到的人来说,这是最简单的解决方案。
Nicholi

1
这是解决方案!@ assaf-hershko,请考虑为此更改已接受的解决方案!
霍克

9
这似乎不再起作用,因为的格式apt-key list不再与此处理它的答案中的命令兼容。而是运行sudo apt-key list | grep -A 1 expired。复制40个十六进制数字的指纹。接下来,运行命令sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $FINGERPRINTwhere $FINGERPRINT您复制的值(如果包含空格,请在其两边加上引号)。
劳伦斯·贡萨尔维斯

48

听起来您需要重新执行MongoDB的安装步骤。首先,删除MongoDB的任何现有存储库文件。执行以下操作。

$ sudo rm /etc/apt/sources.list.d/mongodb*.list

接下来,添加密钥:(没有密钥,将不会加载存储库)。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

现在,创建一个新的MongoDB存储库列表文件:

$ echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

添加存储库详细信息后,我们需要更新软件包列表。

$ sudo apt-get update

现在安装MongoDB。

sudo apt install mongodb-org

希望这可以帮助 !


谢谢@Tiziano。很高兴您能找到解决方案。
PyDevSRS

5
唯一需要的步骤是重新导入密钥:sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
Ben McCann

也为我工作。我认为,正如本所说,重新导入是关键。
詹姆斯·奥布莱恩

取得E:无法找到软件包mongodb-org
Muhammed Hafil

25

您不需要重新安装mongo软件包,只需按以下步骤更改密钥:

列出密钥以确认它已过期:

apt-key list | grep "expired:"

更换钥匙:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xd68fa50fea312927

数字0xd68fa50fea312927是当前有效的密钥ID(于2019-10-09到期),您可以在此处检查。


1
这真的帮助了我。
阿尼尔·乔杜里

我认为这是在这里更详细解释的方法:futurestud.io/tutorials/…。这对我有用。
Little Brain

9

似乎3.2.1版本已于2016年1月11日发布,并且此刻以来软件包的签名是错误的。前一天的包裹签名很好。

裁判:https ://jira.mongodb.org/browse/SERVER/fixforversion/15908/ ? selectedTab = com.atlassian.jira.jira-projects-plugin:version-summary-panel

您可以添加--force-yes选项,或者等待数小时,以便mongodb团队查看并解决该问题。

那里已经有票了:https//jira.mongodb.org/browse/SERVER-22144


1
我使用了--force-yes,使用此解决方案会带来风险吗?

1
2016年3月,尚未修复。
retrography


4
2018年1月,仍然拥有它。
Kostanos '18年

3
仍在2018
Waqas Malik '18

9

在Ubuntu 16.04上安装MongoDB 4.0时,我也遇到了这个问题。所以我做了。

  1. sudo rm /etc/apt/sources.list.d/mongodb*.list -删除MongoDB的任何现有文件

  2. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E52529D4 -添加密钥

  3. sudo bash -c 'echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" > /etc/apt/sources.list.d/mongodb-org-4.0.list' -创建一个新的MongoDB存储库列表文件

现在,使用存储库更新完成安装,然后安装MongoDB,启用该mongod服务并启动它,最后,检查您的MongoDB版本:

sudo apt update
sudo apt install mongodb-org

systemctl enable mongod.service
systemctl start mongod.service

mongo --version

显然,仅通过第2步就可以解决问题,将公钥导入ubuntu密钥存储区。感谢你的回答!
Anand Vaidya

7

使用以下命令在ubuntu 16.04上安装MongoDB 3.2时,我也遇到了此问题。提供以下解决方案作为与MongoDB v3.2安装相关的问题

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update

运行上面的更新命令后,我发现以下警告

W: GPG error: http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release: The following signatures were invalid: KEYEXPIRED 1507497109
W: The repository 'http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release' is not signed.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.

关于进一步调查,请使用以下命令列出所有密钥

sudo apt-key list

它表明当前密钥已在2017-10-08过期

pub   4096R/EA312927 2015-10-09 [expired: 2017-10-08]
uid                  MongoDB 3.2 Release Signing Key <packaging@mongodb.com>

由于MongoDB当前稳定版本(3.4.9),这也很有意义。

要首先解决此问题,我们进行一次小清理(可选)

  1. 我们删除添加的旧密钥

    sudo apt-key list //列出所有键

    sudo apt-key del EA312927 //查找要删除的密钥的uid

    apt键列表| grep Mongodb //验证是否已删除

  2. 现在我们删除/etc/apt/sources.list.d中添加的MongoDB存储库

    须藤rm /etc/apt/sources.list.d/mongodb*.list

  3. 现在,我们使用以下命令安装最新稳定版的MongoDB(3.4.9)

导入Ubuntu软件包管理器使用的公钥

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

为mongoDB创建文件列表以获取当前存储库

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-3.4.list

安装MongoDB

sudo apt-get update
sudo apt-get install mongodb-org

3

我有同样的问题,并通过tarball方法安装mongodb来解决。有关详细信息,请参见下面的链接。

https://docs.mongodb.org/manual/tutorial/install-mongodb-on-linux/

在下面添加详细信息

  1. curl -O https://fastdl.mongodb.org/linux/mongodb-linux-i686-3.2.0.tgz
  2. tar -zxvf mongodb-linux-i686-3.2.0.tgz
  3. mkdir -p mongodb && cp -R -n mongodb-linux-i686-3.2.0 / mongodb
  4. 导出PATH = / bin:$ PATH

  5. 然后运行mongod(可能需要设置数据库路径)


1
提供链接很好,但是请尝试在此处自己解释解决方案
Nehal,2016年

1
我能做到这一点,但链接本身说明了足够的细节,所以我认为这是不必要的...
哈里森Hyunmin町

2

实际上,以下对于解决问题非常重要

$ sudo rm /etc/apt/sources.list.d/mongodb*.list

1

我有同样的问题,所以我做了:

root@skarabi:~# apt remove mongodb-org

然后:

root@skarabi:~# sudo rm /etc/apt/sources.list.d/mongodb*.list

之后:

root@skarabi:~# apt update


那只会从您的计算机中删除MongoDB存储库,不是吗?那你要如何安装?
科林·尼科尔森

然后安装它,您可以检查以下链接:docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu 甚至还有GPG密钥。它与我合作
Zineb SKARABI '17

这既危险又不好。没有理由apt remove仅仅为了获取最新密钥而从您的计算机中(卸载)Mongo。您将破坏整个数据库,只是试图为apt源获取更新的密钥。
BoomShadow

1

使用dlopatin的答案,我针对Ubuntu 18.04提出了此建议,因为该代码不再起作用:

sudo apt-key list | \
grep -A 1 "\[expired:" | \
sed -ne 's|^\s\{1,10\}\(\w*\)|\1|gp' | \
xargs -d '\n' sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys
  1. 清单键 sudo apt-key list
  2. 获取过期的并使用指纹打印下一行 grep -A 1 "\[expired:"
  3. 使用sed仅提取以空格开头的行^\s\{1,10\},并选择字母数字字符\(\w*\),将这些行替换为选定的组即指纹\1,对所有返回的行重复此操作g,然后打印指纹p。这给出了:sed -ne 's|^\s\{1,10\}\(\w*\)|\1|gp'
  4. 将xargs与带分隔符的'\ n'一起使用,否则它将在空格处中断:xargs -d '\n',然后将指纹作为参数传递给apt-key来更新它们:sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys这将为您提供:xargs -d '\n' sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys

希望这很清楚。忽略关于apt键输出解析的警告:)


0

我在Google Cloud的Ubuntu 18.04实例上安装MongoDB 4.2时遇到了类似的问题,并收到以下错误。

W: GPG error: http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 4B7C549A058F8B6B
E: The repository 'http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details

对我有效的解决方案是运行以​​下命令来获取密钥。我在MongoDB官方Jira问题页面上找到了这个。

/usr/bin/curl -sLO https://www.mongodb.org/static/pgp/server-4.2.asc && sudo /usr/bin/apt-key add server-4.2.asc

我在MongoDB官方Jira问题中找到了此解决方案。这是问题的链接

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.