如何使用“没有公钥,无法验证签名“的软件源

时间:2022-10-14 08:18:37
有时我们在/etc/apt/sources.list添加了软件源,或者用add-apt-repository增加了一个PPA repository,然后执行命令sudo apt-get update后会出现类似如下的错误: 
GPG 错误:XXXXX: 由于没有公钥,无法验证下列签名: NO_PUBKEY AED4B06F473041FA


原因主要是使用了未经验证的第三方软件。


解决办法如下: 

1。下载相应的公钥:gpg --keyserver  subkeys.pgp.net --recv-keys AED4B06F473041FA

其中,AED4B06F473041FA是问题签名,可以只用最后8位473041FA表示;

subkeys.pgp.net是可下载公钥的服务器,其他可用的服务器还有:pgpkeys.mit.edu,wwwkeys.pgp.net,keyserver.ubuntu.com等。

问题:

(1)有时,可能由于网络原因,或者本机DNS配置问题,导致服务器无法连接,可以先:host subkeys.gpg.net,获得公钥服务器的IP地址,然后逐一尝试在命令中用IP地址代替subkeys.pgp.net。

(2)如果一个PPA repository被防火墙阻挡,则需要将公钥服务器的端口号修改为80(默认为11371):gpg --keyserver hkp://subkeys.pgp.net:80 --recv-keys AED4B06F473041FA

sudo apt-key adv --keyserver hkp://subkeys.pgp.net00:80 --recv-keys AED4B06F473041FA

或者先执行:export http_proxy="http://subkeys.pgp.net:80"

然后执行:gpg --keyserver-options http-proxy --recv-keys AED4B06F473041FA

(3)如有其他问题,可以用verbose,debug选项查看执行过程gpg --keyserver subkeys.pgp.net --keyserver-options verbose,debug --recv-keys AED4B06F473041FA

2。加载公钥:gpg --export --armor AED4B06F473041FA |  sudo apt-key add - 

3。更新列表:sudo apt-get update

注意:gpg命令不能以sudo身份运行(GPG 错误:http:/.gnupg/gpg.conf’所有权不安全)。


其他相关问题:

1。只升级没有缺失公钥的部分软件

sudo apt-get -o Acquire::pdiffs=false update

sudo apt-get --fix-missing dist-upgrade

sudo apt-get update

2。另一个可选的解决方案:

(1)用root用户登录:sudo su

(2)删除问题签名:gpg --delete-key --armor AED4B06F473041FA
                                  sudo apt-key del AED4B06F473041FA
(3)重新导入该签名:gpg --keyserver-options http-proxy --keyserver subkeys.pgp.net --recv-keys AED4B06F473041FA
                                     gpg --export --armor AED4B06F473041FA | sudo apt-key add -
(4)退出root用户:exit

(5)清缓存
sudo apt-get clean 
cd /var/lib/apt 
sudo rm -rf lists.old 
sudo mv lists lists.old 
sudo mkdir -p lists/partial 
sudo apt-get clean 

(6)更新缓存:sudo apt-get update


3。移除PPA repository:sudo ppa-purge ppa-url

需要先安装ppa-purge:sudo apt-get install ppa-purge

也可以使用add-apt-repository -r(在Linux Mint16上add-apt-repository已不支持-r或-remove选项)


ppa-purge和add-apt-repository的区别:

add-apt-repository -r :Will only remove the said PPA. Will not revert any packages, add-apt-repositoryjust adds and removes lines from /etc/apt/sources.list and /etc/apt/sources.list.d/.

ppa-purge:will not only remove a PPA, it will also downgrade any packages back to their default versions. This is useful when testing beta or newer versions of software.