【问题标题】:MongoDB GPG - Invalid SignaturesMongoDB GPG - 无效签名
【发布时间】:2016-04-16 11:00:42
【问题描述】:

我在 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.orgtrusty/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

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

【问题讨论】:

  • 同样的错误,也是 14.04 LTS
  • 2018 年 2 月问题依然存在,下面有可行的解决方案,但没有被接受:stackoverflow.com/a/46737148/2273305@assaf-hershko,请考虑更改您选择的最佳答案
  • 根据docs.mongodb.com/v3.6/tutorial/install-mongodb-on-ubuntu 的官方安装文档导入密钥对我有用。截至 2019 年 6 月 10 日,要运行的命令是 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

标签: mongodb ubuntu


【解决方案1】:

这适用于我在 ubuntu 焦点 20.04.01 LTS 上安装 MongoDB 版本 3.4.17:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt update

apt-cache policy libssl1.0-dev
sudo apt-get install libssl1.0-dev

sudo apt-get install -y mongodb-org=3.4.17 mongodb-org-server=3.4.17 mongodb-org-shell=3.4.17 mongodb-org-mongos=3.4.17 mongodb-org-tools=3.4.17

【讨论】:

    【解决方案2】:

    听起来您需要重做 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。我很高兴你得到了你的解决方案。
    • 唯一需要的步骤是重新导入密钥:sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
    • 也为我工作。我认为正如 Ben 所说,重新导入是关键。
    • 获取 E:无法找到包 mongodb-org
    【解决方案3】:
    wget -qO - https://www.mongodb.org/static/pgp/server-3.2.asc | sudo apt-key add -
    

    【讨论】:

      【解决方案4】:

      我在 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 问题中找到了这个解决方案。这是问题的link

      【讨论】:

      • 谢谢哥们。这也解决了我对 mongo 4.4 的问题
      【解决方案5】:

      使用 dlopatin's answer 我为 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-key 输出解析的警告 :)

      【讨论】:

        【解决方案6】:

        我在 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 密钥库中导入公钥。感谢您的回答!
        【解决方案7】:

        其实解决这个问题下面是很重要的

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

        【讨论】:

          【解决方案8】:

          在一个命令中从 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 密钥服务器的密钥。

          Source

          【讨论】:

          • 这在 Mint 上效果很好。注意:--recv-key 的参数是过期密钥。
          • 太棒了,非常感谢,它也解决了我在其他应用程序中遇到的类似问题。我需要将其保存在文件中以备将来使用。
          • 对于多年后从“公认的解决方案”中看到的任何人来说,这是最简单的解决方法。
          • 这就是解决方案! @assaf-hershko,请考虑更改已接受的解决方案!
          • 这似乎不再起作用,因为apt-key list 的格式不再与此答案中处理它的命令兼容。相反,运行sudo apt-key list | grep -A 1 expired。复制 40 位十六进制数字指纹。接下来,运行命令sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $FINGERPRINT,其中$FINGERPRINT 是您复制的值(如果它包含空格,请在其周围加上引号)。
          【解决方案9】:

          您不需要重新安装 mongo 包,只需更改密钥如下:

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

          apt-key list | grep "expired:"
          

          更换钥匙:

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

          数字 0xd68fa50fea312927 是当前有效的密钥 ID(2019 年 10 月 9 日到期),您可以查看 here

          【讨论】:

          【解决方案10】:

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

          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密钥。它适用于我
          • 这是危险和糟糕的。没有理由仅仅为了获取最新密钥而从您的机器上 apt remove(卸载)Mongo。您将破坏整个数据库,只是为了尝试为 apt 源获取更新的密钥。
          【解决方案11】:

          使用以下命令在我的 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
          

          显示当前key在2017-10-08过期

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

          这也是有道理的,因为 MongoDB Current Stable Release 现在是 (3.4.9)。

          为了解决这个问题,我们先做一个小清理(可选)

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

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

            sudo apt-key del EA312927 //找到要删除的key的uid

            apt-key 列表 | grep Mongodb // 验证是否被删除

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

            sudo 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
          

          【讨论】:

            【解决方案12】:

            似乎 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

            【讨论】:

            • 我使用了 --force-yes,这个解决方案有风险吗?
            • 2016 年 3 月,尚未修复。
            • 仍在 2017 年 10 月
            • 2018 年 1 月,还在。
            • 仍在 2018 年 3 月
            【解决方案13】:

            我也遇到了同样的问题,通过 tarball 方法安装 mongodb 解决了。详情请参考以下链接。

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

            在下方添加详细信息

            1. 卷曲 -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(可能需要设置db路径)

            【讨论】:

            • 提供链接很好,但这里自己解释解决方案
            • 我可以这样做,但链接本身解释了足够的细节,所以我认为没有必要..
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-18
            相关资源
            最近更新 更多