ฉันควรทำอย่างไรเมื่อฉันได้รับข้อความแสดงข้อผิดพลาด KEYEXPIRED หลังจากการอัพเดต apt-get


74

ในขณะที่อัพเดตแพ็คเกจของฉันบนระบบที่ใช้เดเบียน

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

ในการค้นหาคีย์ที่เก็บที่หมดอายุและ ID ของคีย์เหล่านั้นให้ใช้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
ที่ใช้งานไม่ได้สำหรับฉันหลังจากคำสั่งสำหรับการอัปเดตรหัสกุญแจยังคงหมดอายุ
Karl Forner

@KarlForner กำลังเพิ่มรหัสสำเร็จหรือไม่
kynan

ใช่มันประสบความสำเร็จ
Karl Forner

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
เพียงคำใบ้เกี่ยวกับ grep part: "expired" คือ i18ned ดังนั้นขึ้นอยู่กับการตั้งค่า LANG * ซึ่งอาจใช้งานไม่ได้ตัวอย่างเช่นการตั้งค่า pl_PL.UTF-8 ต้องเปลี่ยน "หมดอายุ" เป็น "wygasł" เพื่อทำให้สิ่งนี้ - ซับในการทำงาน
Cromax

6

คุณต้องได้รับคีย์ที่ใหม่กว่าและเพิ่มที่จุดนี้จะตรวจจับมันและไม่บ่น สิ่งนี้ไม่ควรเกิดขึ้นตามปกติ แต่บางครั้งก็เกิดขึ้น สิ่งที่คุณต้องการจริงๆคือการรู้รหัสฐานสิบหกของคีย์ที่คุณต้องการเพิ่ม เมื่อคุณมีแล้วมันก็ตกต่ำมากจากที่นั่น

ตัวอย่างบางส่วน:


2

ฉันมีข้อผิดพลาดคล้ายกัน แต่ปัญหาอยู่ในเวลาของระบบ ปีพศ. 2504 :)

ฉันแก้ไขวันที่ / เวลาของระบบและหลังจากนั้นสามารถอัปเดตโดยไม่ต้องใช้มืออาชีพ


1

บนDebian Wiki เกี่ยวกับ SecureAPTฉันพบว่าฉันควรลบบรรทัดที่มีnon-usจาก /etc/apt/sources.list

ฉันทำอย่างนั้นจริง ๆ และมันก็ใช้ได้ผล


5
สิ่งนี้อาจใช้งานได้ในกรณีเฉพาะ แต่ไม่ใช่วิธีแก้ปัญหาทั่วไป
kynan

1

มันอาจเกิดขึ้นเมื่อวันที่ไม่ถูกต้อง

ตรวจสอบวันที่ด้วย

date

หากการกำหนดค่าผิดพลาดให้ทำดังต่อไปนี้เพื่อตั้งค่าเขตเวลาและวันที่ในการซิงโครไนซ์อัตโนมัติ

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

1

สาเหตุหนึ่งที่เป็นไปไม่ได้สูง แต่เป็นไปได้บางครั้งอาจทำให้เกิดข้อผิดพลาดนี้ได้หากเพิ่มรหัสเดิมสองครั้งพร้อมวันหมดอายุที่แตกต่างกัน คุณอาจรู้ว่าได้ทำไปแล้วเพื่อให้คำตอบนี้มีความเกี่ยวข้องกับคุณ

สิ่งนี้สามารถเกิดขึ้นได้เช่นเดียวกับฉันเมื่อโฮสต์ที่เก็บของคุณด้วยกุญแจของคุณเอง หากคุณเมื่อคีย์กำลังจะหมดอายุให้ขยายอายุการใช้งานแทนการเปลี่ยนและถ้าคุณติดตั้งคีย์ดั้งเดิมโดยใช้การป้อนค่าล่วงหน้า แต่คีย์ที่อัปเดตโดยใช้แพคเกจ deb แล้วคีย์เก่าจะอยู่ใน/etc/apt/trusted.gpgขณะที่คีย์ใหม่ /etc/apt/trusted.gpg.d/สิ้นสุดขึ้นเป็นไฟล์แยกต่างหากภายใต้ รหัสเก่าจะทำให้เกิดเงาใหม่ซึ่งจะถูกละเว้นโดยapt-keyสมบูรณ์ ลบคีย์เก่าโดยการเรียกใช้gpg --keyring /etc/trusted.gpg --delete-keys <keyid>และตรวจพบคีย์ใหม่ของคุณ

นี่เป็นบิตของการกำหนดค่ามุมที่ไม่ได้มาตรฐาน แต่ฉันหวังว่าคำตอบของฉันสามารถบันทึกความสับสนบางอย่างในกรณีที่คนอื่นพบปัญหานี้เนื่องจากเหตุผลเดียวกับที่ฉันทำ


1

ผู้ประกอบการแบบง่ายขึ้น:

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 จะไร้ประโยชน์ นี่คือคุณลักษณะด้านความปลอดภัยและในสภาพแวดล้อมการผลิตความสมบูรณ์ที่สำคัญคือสิ่งสำคัญสำหรับความปลอดภัย
Broco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.