paulgreg Asked: 2009-05-12 11:58:18 +0800 CST2009-05-12 11:58:18 +0800 CST 2009-05-12 11:58:18 +0800 CST apt-get 更新后收到 KEYEXPIRED 错误消息时该怎么办? 772 在基于 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 我应该怎么做才能解决这个问题? linux debian 8 个回答 Voted kynan 2014-07-25T15:44:11+08:002014-07-25T15:44:11+08:00 要查找任何过期的存储库密钥及其 ID,请使用apt-key以下方法: LANG=C apt-key list | grep expired 您将获得类似于以下的结果: pub 4096R/BE1DB1F1 2011-03-29 [expired: 2014-03-28] 在这种情况下,密钥 ID 是/ie之后的位。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 Avery Payne 2009-05-12T12:09:46+08:002009-05-12T12:09:46+08:00 您需要获取更新的密钥并添加它,此时 apt 会检测到它而不是抱怨。这通常不应该发生,但有时会发生。您真正需要的是知道您需要添加的密钥的十六进制代码;一旦你有了它,它就会从那里开始走下坡路。 一些例子: 为 backports 添加密钥:前几行是您所追求的,尽管您需要拥有它想要的密钥。 添加密钥ala Ubuntu Best Answer paulgreg 2009-05-13T12:12:10+08:002009-05-13T12:12:10+08:00 在关于 SecureAPT 的 Debian Wiki 上,我发现我应该non-us从 /etc/apt/sources.list 中删除包含的行。 我确实这样做了,而且效果很好。 slava 2013-04-04T08:25:53+08:002013-04-04T08:25:53+08:00 我有类似的错误,但问题出在系统时间。那一年是 1961 年 :) 我更正了系统日期/时间,之后可以在没有专业人士的情况下更新 Aley 2016-03-25T06:43:06+08:002016-03-25T06:43:06+08:00 当日期不正确时,也可能发生这种情况。 检查日期 date 如果配置错误,请执行以下操作来设置您的时区和日期自动同步。 apt-get install ntp ntpdate && service ntp stop dpkg-reconfigure tzdata ntpdate-debian service ntp start sampi 2018-01-12T12:45:45+08:002018-01-12T12:45:45+08:00 导致此错误的一个极不可能但偶尔可能的原因是,如果两次添加了具有不同到期日期的相同密钥。您可能会知道这样做是为了让这个答案与您相关。 当使用您自己的密钥托管您自己的存储库时,可能会发生这种情况,就像对我一样。如果您在密钥即将到期时只是延长其生命周期而不是更改它,并且如果您使用预置安装原始密钥但使用 deb 包安装更新密钥,那么旧密钥将在/etc/apt/trusted.gpg,而新密钥最终作为/etc/apt/trusted.gpg.d/. 旧键将遮盖新键,它将被 完全忽略apt-key。通过运行删除旧密钥gpg --keyring /etc/apt/trusted.gpg --delete-keys <keyid>,您的新密钥将被检测到。 这有点不标准的角落配置,但我希望我的回答可以避免一些混乱,以防其他人由于与我相同的原因遇到这个问题。 Bruno Bronosky 2018-04-25T10:37:51+08:002018-04-25T10:37:51+08:00 一个更简单的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不止一次的事情,有一个更好的工具。(另外,我根据不同的问题创建了这个。) Michael Franzl 2015-06-04T03:53:26+08:002015-06-04T03:53:26+08:00 你不必做任何事情。这只是一个警告,您可以从W:前缀中看到。
要查找任何过期的存储库密钥及其 ID,请使用
apt-key
以下方法:您将获得类似于以下的结果:
在这种情况下,密钥 ID 是
/
ie之后的位。BE1DB1F1
要更新密钥,请运行
注意:如果包维护者尚未(尚未)上传新密钥,则更新密钥显然不起作用。在这种情况下,除了联系维护人员、针对您的发行版提交错误等之外,您几乎无能为力。
一个更新所有过期密钥的班轮:(感谢@ryanpcmcquen)
您需要获取更新的密钥并添加它,此时 apt 会检测到它而不是抱怨。这通常不应该发生,但有时会发生。您真正需要的是知道您需要添加的密钥的十六进制代码;一旦你有了它,它就会从那里开始走下坡路。
一些例子:
为 backports 添加密钥:前几行是您所追求的,尽管您需要拥有它想要的密钥。
添加密钥ala Ubuntu
在关于 SecureAPT 的 Debian Wiki 上,我发现我应该
non-us
从 /etc/apt/sources.list 中删除包含的行。我确实这样做了,而且效果很好。
我有类似的错误,但问题出在系统时间。那一年是 1961 年 :)
我更正了系统日期/时间,之后可以在没有专业人士的情况下更新
当日期不正确时,也可能发生这种情况。
检查日期
如果配置错误,请执行以下操作来设置您的时区和日期自动同步。
导致此错误的一个极不可能但偶尔可能的原因是,如果两次添加了具有不同到期日期的相同密钥。您可能会知道这样做是为了让这个答案与您相关。
当使用您自己的密钥托管您自己的存储库时,可能会发生这种情况,就像对我一样。如果您在密钥即将到期时只是延长其生命周期而不是更改它,并且如果您使用预置安装原始密钥但使用 deb 包安装更新密钥,那么旧密钥将在
/etc/apt/trusted.gpg
,而新密钥最终作为/etc/apt/trusted.gpg.d/
. 旧键将遮盖新键,它将被 完全忽略apt-key
。通过运行删除旧密钥gpg --keyring /etc/apt/trusted.gpg --delete-keys <keyid>
,您的新密钥将被检测到。这有点不标准的角落配置,但我希望我的回答可以避免一些混乱,以防其他人由于与我相同的原因遇到这个问题。
一个更简单的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
不止一次的事情,有一个更好的工具。(另外,我根据不同的问题创建了这个。)你不必做任何事情。这只是一个警告,您可以从
W:
前缀中看到。