由于没有公钥,无法验证下列签名: NO_PUBKEY 678910JQKJ

在国内利用本地启动盘安装了ubuntu22.04LTS,在更新的时候,遇到了“由于没有公钥,无法验证下列签名: NO_PUBKEY 3D4C35B080264AA9”的问题,遇到这种问题在网上搜到的最新也就到2021年,他们一说是没有更新国内的源,二说需要取回3D4C35B080264AA9的PUBKEY

第二种说法最简单,一行命令别人就能解决:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 3D4C35B080264AA9
zaa@zaa-0-1:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 3D4C35B080264AA9
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.gBxPK6ISPI/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 3D4C35B080264AA9
gpg: 从公钥服务器接收失败:无数据

看来第二种说法对于我来说是毫无用处的了。注意到这里出现了一行警告:apt-key is deprecated,提示Manage keyring files in trusted.gpg.d instead(提示管理一下trusted.gpg.d里面的keyring files),查了一下在apt-key(8)里面提到了apt-key的”非安全“办法最后只支持到22.04LTS,而apt-key提供全部的add这种“非安全”的方式导致了deprecation。利用apt-key list查看哪些pub没有被加入:

zaa@zaa-0-1:~$ sudo apt-key list
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg
------------------------------------------------------
pub   rsa4096 2012-05-11 [SC]
      8439 38DF 228D 22F7 B374  2BC0 D94A A3F0 EFE2 1092
uid             [ 未知 ] Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>

/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg
------------------------------------------------------
pub   rsa4096 2018-09-17 [SC]
      F6EC B376 2474 EDA9 D21B  7022 8719 20D1 991B C93C
uid             [ 未知 ] Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>

跑一边apt update,通过warning内容来判断哪些gpg需要加入上面的PUBKEYS

zaa@zaa-0-1:~$ sudo apt update
命中:1 https://mirrors.ustc.edu.cn/ubuntu jammy InRelease
命中:2 https://mirrors.ustc.edu.cn/ubuntu jammy-backports InRelease
命中:3 https://mirrors.ustc.edu.cn/ubuntu jammy-security InRelease
命中:4 https://mirrors.ustc.edu.cn/ubuntu jammy-updates InRelease
命中:6 http://mirrors.huaweicloud.com/repository/ubuntu jammy InRelease
命中:7 http://mirrors.huaweicloud.com/repository/ubuntu jammy-updates InRelease
命中:8 http://mirrors.huaweicloud.com/repository/ubuntu jammy-backports InRelease
命中:9 http://mirrors.huaweicloud.com/repository/ubuntu jammy-security InRelease
获取:5 http://file.tickstep.com/apt aliyunpan InRelease [2,114 B]
错误:5 http://file.tickstep.com/apt aliyunpan InRelease
  由于没有公钥,无法验证下列签名: NO_PUBKEY 3D4C35B080264AA9  #注意这里,阿里云盘的apt没有PUBKEY!!!
正在读取软件包列表... 完成
W: GPG 错误:http://file.tickstep.com/apt aliyunpan InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 3D4C35B080264AA9
E: 仓库 “http://file.tickstep.com/apt aliyunpan InRelease” 没有数字签名。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。

执行完之后始终卡在阿里云盘的PUBKEY上,我直接访问源http://file.tickstep.com/apt,结果根本就不存在了,于是我到/etc/apt/sources.list.d 下面把所有的ubuntu的esut和aliyunpan的文件都删除了,在执行apt update就OK了。

zaa@zaa-0-1:/etc/apt/sources.list.d$ ls
archive_uri-https_mirrors_ustc_edu_cn_ubuntu_-jammy.list       tickstep-aliyunpan.list
archive_uri-https_mirrors_ustc_edu_cn_ubuntu_-jammy.list.save  tickstep-aliyunpan.list.save
zaa@zaa-0-1:/etc/apt/sources.list.d$ sudo rm -rf *

再执行apt update

zaa@zaa-0-1:~$ sudo apt update<br>命中:1 http://mirrors.huaweicloud.com/repository/ubuntu jammy InRelease<br>命中:2 http://mirrors.huaweicloud.com/repository/ubuntu jammy-updates InRelease<br>命中:3 http://mirrors.huaweicloud.com/repository/ubuntu jammy-backports InRelease<br>命中:4 http://mirrors.huaweicloud.com/repository/ubuntu jammy-security InRelease<br>正在读取软件包列表… 完成<br>正在分析软件包的依赖关系树… 完成<br>正在读取状态信息… 完成<br>有 2 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。

这个问题就一种说法,只是个人化解起来走了一堆弯路。problem就是很简单的:国外源水土不服,国内源(老旧源)残留source.list.d的文件干预更改为华为云之后apt update的执行,很无聊的一个问题,症结是防火墙,解决办法英文地区不会遇到,中文区的情况和个人水平又导致了懂得都懂,不懂的烦死的一个局面。