解决GPG error: The following signatures couldn't be verified because the public key is not available

本文介绍如何在Ubuntu10.04系统中为Git从1.7版本升级到1.8版本,包括添加新的软件源、解决GPG密钥验证问题及具体升级步骤。

因为公司同事写的新脚本里使用了git v1.8 以后才有命令参数,这个参数在git v1.7版本上是没有的,而我们的Ubuntu 10.04的package 源里最新的git-core 就是1.7.xx,需要升级git的话需要添加新的git 源到/etc/apt/sources.list:

deb http://ppa.launchpad.net/git-core/ppa/ubuntu lucid main
deb-src http://ppa.launchpad.net/git-core/ppa/ubuntu lucid main

注:以上只适用Ubuntu10.04

然后执行:

$ sudo apt-get update

有错误:

W: GPG error: http://ppa.launchpad.net lucid Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A1715D88E1DF1F24


Google 之,在这篇文档里有提到解决方案:

http://muzso.hu/2007/05/25/how-to-fix-no_pubkey-errors-in-apt-get-update-operations

具体的解决方法步骤是(注意下面的KEY 是根据每次报错而不同的,可能需要用实际报错的KEY替换命令中的KEY值):

$ sudo gpg --keyserver keyserver.ubuntu.com --recv A1715D88E1DF1F24

$ sudo gpg --export --armor A1715D88E1DF1F24 | sudo apt-key add -

注:上面第二个命令中的第二个sudo,因为sudo不能跨越Pipe,所以第二个命令也需要使用sudo


接着执行:

$ sudo apt-get update

不会再报错了;接着安装git-core:


$ sudo apt-get install git-core

注:在执行上面这条命令时有可能没有能够升级git,可以试试先删除然后重新安装的方法,看能否解决: 

$ sudo apt-get remove git

$ sudo apt-get install git-core

当遇到 `The following signatures couldn't be verified because the public key is not available: NO_PUBKEY` 错误时,通常是在使用 `apt` 进行软件包安装或更新时,系统无法找到用于验证仓库签名的 GPG 公钥。这种错误常见于添加第三方仓库后未导入其公钥的情况。以下是几种解决此问题的方法: ### 方法一:使用 `apt-key` 导入缺失的公钥 可以通过 `apt-key` 命令从密钥服务器获取缺失的公钥。例如,如果错误信息中显示的密钥 ID 是 `3B4FE6ACC0B21F32`,则可以使用以下命令导入该密钥: ```bash sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32 ``` 此命令会从 `keyserver.ubuntu.com` 获取指定的密钥并添加到本地的 APT 密钥环中,从而允许 APT 验证仓库的签名[^1]。 ### 方法二:在 Dockerfile 中预导入公钥 如果是在构建 Docker 镜像时遇到了这个问题,可以在 Dockerfile 中预先导入所需的公钥。例如,可以添加如下命令到 Dockerfile 中: ```dockerfile RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5 RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com EF0F382A1A7B6500 ``` 这些命令会在构建过程中自动导入所需的公钥,确保后续的 `apt update` 和软件包安装操作能够顺利进行[^4]。 ### 方法三:手动下载并导入公钥 如果上述方法无法解决问题,还可以尝试手动下载公钥文件并将其导入到 APT 密钥环中。首先,从可信的来源下载公钥文件(例如 `keyfile.gpg`),然后使用以下命令导入: ```bash sudo apt-key add keyfile.gpg ``` 这种方法适用于那些无法通过密钥服务器直接获取的公钥。 ### 方法四:检查仓库配置 有时候,问题可能不是出在公钥本身,而是由于仓库配置错误导致的。可以检查 `/etc/apt/sources.list` 文件以及 `/etc/apt/sources.list.d/` 目录下的文件,确保所有仓库地址都是正确的,并且对应的公钥已经正确导入。如果某个仓库不再需要,可以将其从配置文件中移除,以避免不必要的错误[^2]。 ### 方法五:清除 APT 缓存并重试 有时 APT 缓存中的旧数据可能导致问题。可以尝试清除 APT 缓存,然后重新运行 `apt update`: ```bash sudo apt clean sudo apt update ``` 这将清除本地的 APT 缓存,并重新下载仓库索引文件,可能会解决一些临时性的问题[^3]。 ### 方法六:使用 `--allow-unauthenticated` 选项(不推荐) 作为最后的手段,如果确实不需要验证仓库签名,可以使用 `--allow-unauthenticated` 选项来忽略签名验证。但这会降低系统的安全性,因此不建议在生产环境中使用: ```bash sudo apt update --allow-unauthenticated ``` 此命令将允许 APT 忽略所有未签名的仓库,但请谨慎使用,因为它可能会导致潜在的安全风险。 ### 总结 解决 `NO_PUBKEY` 错误的关键在于确保所有使用的仓库都有对应的公钥被正确导入到 APT 密钥环中。通过上述方法,可以有效地解决大多数由公钥不可用引起的签名验证问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值