Що робити, коли після оновлення apt-get я отримав повідомлення про помилку KEYEXPIRED?


74

Під час оновлення моїх пакунків на базі системи 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

Що мені робити, щоб це виправити?

Відповіді:


117

Щоб знайти будь-які ключі сховища з минулим терміном дії та їх ідентифікатори, використовуйте apt-keyнаступне:

LANG=C apt-key list | grep expired

Ви отримаєте результат, подібний до наступного:

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

Ключовий ідентифікатор - це біт після /тобто 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

2
це не працює для мене, після команди для оновлення ключа ключ все ще закінчився.
Карл Форнер

@KarlForner додав ключ вдало?
кинан

так, це було успішно.
Карл Форнер

4
Один лайнер: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
ryanpcmcquen

2
Лише натяк на відновлення частини: "термін дії" закінчується i18ned, тому залежно від налаштувань LANG * це може не працювати, наприклад, для налаштувань pl_PL.UTF-8 потрібно змінити "минув" на "wygasł", щоб зробити цю- лайнер на роботу.
Cromax

6

Вам потрібно отримати новий ключ і додати його, в який момент влучний його виявить і не поскаржиться. Зазвичай це не має відбуватися, але іноді це буває. Те, що вам справді потрібно, - це знати шістнадцятковий код ключа, який потрібно додати; як тільки це у вас є, це звідси досить під гору.

Деякі приклади:


2

У мене була схожа помилка, але проблема була в системному часі. Рік був 1961 :)

Я виправив дату / час системи і після цього міг оновитись без профіля


1

У Вікі Debian про SecureAPT я виявив, що слід видалити рядок, що містить non-usіз /etc/apt/sources.list.

Я насправді це зробив, і це спрацювало.


5
Це, можливо, спрацювало в одному конкретному випадку, але це не є загальним рішенням
кинан

1

Це також може статися, коли дата не є правильною.

Перевірте дату

date

Якщо його неправильно налаштовано, зробіть наступне, щоб встановити часовий пояс і автоматичну синхронізацію дати.

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

1

Одна з дуже малоймовірних, але іноді можливих причин для цієї помилки - це якщо двічі додати один і той же ключ із різними термінами придатності. Ви, ймовірно, знаєте, що зробили це, щоб ця відповідь була актуальною для вас.

Це може статися, як і у мене, коли ви розміщуєте власне сховище з власними ключами. Якщо ви, коли ключ закінчиться, просто продовжите його термін експлуатації, а не замініть його, і якщо ви встановили оригінальний ключ за допомогою попереднього попереднього перегляду, але оновленого ключа, використовуючи пакет дебюту, то старий ключ буде в наявності /etc/apt/trusted.gpg, а новий закінчується як окремий файл під /etc/apt/trusted.gpg.d/. Старий ключ затінить новий, який повністю ігнорується apt-key. Видаліть старий ключ запуском gpg --keyring /etc/trusted.gpg --delete-keys <keyid>, і ваш новий ключ буде виявлений.

Це трохи нестандартна кутова конфігурація, але я сподіваюся, що моя відповідь може врятувати певну плутанину у випадку, якщо хтось інший зіткнеться з цією проблемою з тієї ж причини, що і я.


1

Більш простий 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

Вам нічого не потрібно робити. Це лише попередження, ви можете бачити це з W:префікса.


1
Якби йому нічого не потрібно було робити, вся система підпису для Repos була б марною. Це захисна функція, і у виробничих середовищах ключова цілісність є визначальною для безпеки.
Броко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.