it-swarm.cn

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

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

Sudo apt-get update

我收到该错误消息:

Reading package lists... Done
W: GPG error: ftp://ftp.fr.debian.org stable/non-US Release: 
The following signatures were invalid: KEYEXPIRED 1138684904

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

74
paulgreg

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

实际上,我做到了,而且奏效。

1
paulgreg

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

LANG=C apt-key list | grep expired

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

pub   4096R/BE1DB1F1 2011-03-29 [expired: 2014-03-28]

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

要更新密钥,请运行

Sudo apt-key adv --recv-keys --keyserver keys.gnupg.net BE1DB1F1

注意:如果软件包维护者尚未上传新密钥,则更新密钥显然不会工作。在这种情况下,除了与维护人员联系,针对您的发行版提交错误之外,您几乎无能为力。

一个衬里更新所有过期的密钥:(感谢@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
118
kynan

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

一些例子:

6
Avery Payne

我有类似的错误,但是问题出在系统时间上。那年是1961年:)

我更正了系统日期/时间,此后无需专业人士即可进行更新

2
slava

日期不正确时也可能发生。

用检查日期

date

如果配置错误,请执行以下操作以设置时区和日期自动同步。

apt-get install ntp ntpdate && service ntp stop
dpkg-reconfigure tzdata
ntpdate-debian
service ntp start
1
Aley

造成此错误的可能性极小(但有时也可能是)的原因是,两次添加相同密钥的有效期不同。您可能会知道这样做是为了使该答案与您相关。

当使用自己的密钥托管自己的存储库时,可能会发生这种情况,就像对我一样。如果您在密钥即将到期时,只需延长其寿命而不是更改密钥,并且如果您使用预播安装了原始密钥,而使用deb软件包安装了更新的密钥,则旧密钥将位于/etc/apt/trusted.gpg ,而新文件最终以/etc/apt/trusted.gpg.d/下的单独文件形式出现。旧密钥将遮盖新密钥,而apt-key则将其完全忽略。通过运行gpg --keyring /etc/trusted.gpg --delete-keys <keyid>删除旧密钥,新密钥将被检测到。

这有点非标准的转角配置,但是我希望我的回答可以避免造成一些混乱,以防其他人由于与我相同的原因而遇到此问题。

1
sampi

更简单的oneliner:

for key in $(Sudo apt-key list | awk -v FS='[ /:]+' '/expire[sd]/ {print $3}'); do Sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $key; done

我只是觉得,如果您多次使用cut之类的东西,那么会有更好的工具。 (此外,我基于 另一个问题 创建了此文件。)

1
Bruno Bronosky

您不需要必须做任何事情。只是警告,您可以从W: 字首。

0
Michael Franzl