当我在 apt-get 更新后收到 KEYEXPIRED 错误消息时,我该怎么办?

pau*_*reg 75 linux debian

在基于 debian 的系统上更新我的软件包时

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

我收到了那个错误信息:

Reading package lists... Done
W: GPG error: ftp://ftp.fr.debian.org stable/non-US Release: 
The following signatures were invalid: KEYEXPIRED 1138684904
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?

kyn*_*nan 122

要查找任何过期的存储库密钥及其 ID,请使用apt-key以下方法:

LANG=C apt-key list | grep expired
Run Code Online (Sandbox Code Playgroud)

您将得到类似于以下内容的结果:

pub   4096R/BE1DB1F1 2011-03-29 [expired: 2014-03-28]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,密钥 ID 是/ie之后的位BE1DB1F1

要更新密钥,请运行

sudo apt-key adv --recv-keys --keyserver keys.gnupg.net BE1DB1F1
Run Code Online (Sandbox Code Playgroud)

注意:更新的关键显然不是,如果软件包的维护者并没有(还)上传一个新的关键工作。在这种情况下,除了联系维护者、针对您的发行版提交错误等之外,您几乎无能为力。

一个用于更新所有过期密钥的班轮:(感谢@ryanpcmcquen)

for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用,在更新密钥的命令之后,密钥仍然过期。 (4认同)
  • 一行:`for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); 做 sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; 完成` (4认同)
  • 关于 grep 部分的提示:“过期”是 i18ned,因此根据 LANG* 设置,这可能不起作用,例如对于设置 pl_PL.UTF-8,必须将“过期”更改为“wygasł”以使其成为 -班轮上班。 (2认同)

Ave*_*yne 7

您需要获取较新的密钥并添加它,此时 apt 将检测到它而不是抱怨。这通常不应该发生,但有时会发生。您真正需要的是知道您需要添加的密钥的十六进制代码;一旦你有了它,它就会从那里走下坡路。

一些例子:


pau*_*reg 2

关于 SecureAPT 的 Debian Wiki上,我发现我应该删除包含non-us/etc/apt/sources.list 的行。

我确实这么做了并且成功了。

  • 这可能在一种特定情况下有效,但“不是”通用解决方案 (5认同)