“ ไม่มีพับลิกคีย์พร้อมใช้งาน” ในการอัพเดต apt-get


133

เมื่อดำเนินการapt-get updateฉันได้รับข้อผิดพลาดต่อไปนี้:

root@ADS3-Debian6:/home/aluno# apt-get update
Atingido http://sft.if.usp.br squeeze Release.gpg
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-en
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-pt
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-pt_BR

( ... )

Obter:10 http://security.debian.org squeeze/updates/non-free i386 Packages [14 B]
Baixados 612 kB em 4s (125 kB/s)                    
Lendo listas de pacotes... Pronto
There is no public key available for the following key IDs: 8B48AD6246925553

2
... และสตริงที่คุณนำออกมานั้นเป็นบิตที่สำคัญ มันจะให้เราระบุคีย์ที่คุณหายไป (สมมติว่าการติดตั้งแพคเกจพวงกุญแจ - ดีกว่าจากสื่อที่เชื่อถือได้ - ที่แนะนำ ruda ไม่ช่วย)
Derobert

1
คุณไม่ควรปล่อยให้แมวของคุณเดินบนแป้นพิมพ์แบบนั้น :-) ⁠
G-Man

คำตอบ:


173

คำตอบอื่น ๆ จะใช้งานได้หรือไม่ขึ้นอยู่กับว่าคีย์ '8B48AD6246925553' ปรากฏอยู่ในแพ็คเกจที่ระบุหรือไม่

หากคุณต้องการรหัสคุณจะต้องได้รับรหัสนั้นและจะหาได้ที่ไหนมันอยู่ในเซิร์ฟเวอร์คีย์ (อาจเป็นเซิร์ฟเวอร์หลัก ๆ ก็ได้):

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553

สิ่งนี้ใช้ได้กับฉันเช่นกันและไม่ใช่คำตอบอื่น ๆ ที่นี่ ..
38811 Sai

@ starbeamrainbowlabs ตอนนี้เป็นแล้ว! =)
Guy บราซิลนั่น

@ThatBrazilianGuy: D
starbeamrainbowlabs

4
มีวิธีใดบ้างที่จะตรวจสอบว่าคีย์ที่ได้รับนั้นถูกต้องหรือไม่ซึ่งฉันสามารถทำสิ่งที่เป็นอันตรายเช่นการเพิ่มความไว้วางใจที่ฉลาดทั่วโลกให้กับคีย์ที่กำหนดเองได้หรือไม่? มีวิธีใดบ้างในการตรวจสอบความน่าเชื่อถือของรหัสหลังจากได้รับแล้ว ขั้นตอนในการดำเนินการเพื่อตรวจสอบคีย์คืออะไร ตัวอย่างเช่นสิ่งเดียวที่คุณมีคือftp-master.debian.org/keys/ziyi_key_2002.ascดังนั้นคุณจะไปที่คีย์ปัจจุบันได้อย่างไรโดยไม่ทำลายเชนที่เชื่อถือได้
Tino

1
@ThatBrazilianGuy: ความจริงที่ว่ามันเป็นคำถามของคุณไม่ได้ให้สิทธิ์คุณในการทำลายคำตอบ
G-Man

76

ฉันแนะนำให้คุณปฏิบัติตามคำตอบของ @ mariotomo มากกว่าขั้นตอนด้านล่าง:


ตามที่ไม่มีกุญแจสาธารณะสามารถใช้ได้สำหรับ ID ที่สำคัญต่อไปนี้เป็นนี้จะแก้ไขได้:

sudo aptitude install debian-archive-keyring

อ้างอิง


เลขฐานสิบหก 8 หลักสุดท้ายจะถูกแชร์กับสิ่งนี้ดังนั้นอาจเป็นเรื่องบ่นเกี่ยวกับเสียงฮืด ๆ น่าเสียดายที่ OP ได้เปิดเผยว่า: pub 4096R / 46925553 2012-04-27 [หมดอายุ: 2020-04-25] uid Debian Archive คีย์การลงชื่ออัตโนมัติ (7.0 / wheezy) <ftpmaster@debian.org>
Martin Dorey

5
เป็นdebian-keyringความจำเป็นจริงๆ? debian-archive-keyringมันทำงานออกสำหรับฉันที่มีเพียง
x-yuri

ไม่น่าแปลกใจที่ตัวเลขฐานสิบหกที่แตกต่างกันอาจต้องการวิธีแก้ไขที่แตกต่าง ฉันใส่เครื่องหมายคำพูดล้อมรอบตัวเลขในการค้นหาของ Google เพื่อบังคับให้ค้นหาคำต่อคำแบบตัวเลขและฉันลงที่หน้านี้ซึ่งแก้ไขปัญหาของฉัน: reddit.com/r/linux4noobs/comments/4grdo7/ (คำตอบของ @ mariotomo อาจทำงานได้เช่นกัน - ฉันไม่ได้ลอง)
Michael Scheper

debian-keyringจะไม่จำเป็น
x-yuri

38

ฉันแนะนำ:

$ sudo apt-get install debian-archive-keyring
$ sudo apt-key update

นี่เป็นวิธีที่ดีกว่าวิธีอื่น ๆ เนื่องจากไม่ได้ติดตั้งdebian-keyringซึ่งมีขนาดใหญ่และ 99% ของเวลาไม่จำเป็น


1
นี่คือทั้งหมดที่ฉันต้องการ - ใช้งานได้ดีสำหรับฉัน!
harperville

ทำงานเหมือนจับใจ!
Wilbeibi

1
นี่เป็นทางออกที่ดีกว่าสำหรับฉันเพราะมันเข้ากันได้ดีกับ Docker container อย่างไรก็ตามทราบว่า (อย่างน้อยในหาง) คุณจะต้องติดตั้งเฉพาะแพคเกจนี้เป็นครั้งแรกแล้วทำสองapt-get update, แล้วติดตั้งแพคเกจที่คุณต้องการจริงๆ
Malvineous

Debian 10: คำเตือน: 'อัปเดต apt-key' เลิกใช้แล้วและไม่ควรใช้อีกต่อไป! หมายเหตุ: ในการแจกจ่ายของคุณคำสั่งนี้ไม่มีการใช้งานและสามารถลบออกได้อย่างปลอดภัย
aexl

ในความเป็นจริงคุณอาจต้องติดตั้ง debian-archive-keyring แม้ว่าคุณจะติดตั้ง debian-keyring ในเวอร์ชันล่าสุด
Ángel

17

ข้อผิดพลาดไม่มีรหัสสาธารณะสำหรับรหัสคีย์ต่อไปนี้ระบุถึงปัญหาด้านความปลอดภัยที่ร้ายแรง : แพคเกจระบบปฏิบัติการไม่สามารถตรวจสอบความถูกต้องของรหัสสาธารณะได้เนื่องจากรหัสสาธารณะหายไป

หากข้อความคือ:

There is no public key available for the following key IDs: 1397BC53640DB551

คุณสามารถใช้คำสั่งนี้เพื่อค้นหาที่เก็บที่ใช้คีย์:

for n in `ls /var/lib/apt/lists/*gpg`; do echo "$n" ; gpg --list-packets "$n" | grep 1397BC53640DB551; done

ซึ่งในตัวอย่างนี้เป็นที่เก็บของ Google สำหรับ Chrome:

/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release.gpg

หากคุณเชื่อถือ Google รัฐบาล ฯลฯ คุณควรทราบว่าคีย์อยู่ที่ไหนและเพิ่มด้วย:

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -

แก้ไขสำหรับฉัน :) ขอบคุณ! แต่แค่อยากรู้อยากเห็นเกิดอะไรขึ้น คำสั่งแรกทำอะไรและคำสั่งที่สองทำอะไร ควรแก้ปัญหาทั้งหมดหรือไม่ ปัญหาของฉันก็คือกับ Google Chrome
Rohan

และคำสั่งแรกเปลี่ยนอะไรด้วย gpg ไหม? มันบอกว่ามันสร้างไฟล์ conf ไว้ gpg.conf และฉันไม่รู้ว่าฉันต้องการมันหรือไม่
Rohan

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

3

ฉันประสบปัญหาเดียวกันใน Linux Mint (Kernel เวอร์ชัน 3.13.0-24) และฉันสามารถแก้ไขได้โดยใช้คำสั่ง:

gpg --recv-keys <the-reported-key>

gpg --export <the-reported-key> | apt-key add -

คะแนนที่ควรสังเกต:

1) คำสั่งถูกดำเนินการตามลำดับ 2) คำสั่งถูก exectued เป็นผู้ใช้รูท

มารยาทนี้คำตอบ


1

เป็นทางเลือก:

$ sudo apt-get install debian-keyring debian-archive-keyring
$ sudo apt-key update

6
โปรดอย่าโฆษณาบล็อกของคุณในคำตอบของคุณ นั่นคือสิ่งที่ชีวภาพของคุณมีไว้เพื่อ
slm

1

คำตอบของฉันคือการอัปเกรดเล็กน้อย (IMHO, YMMV) ใน @mariotomo (ที่ฉันโหวต) ในสคริปต์ทุบตีต่อไปนี้

  • ยังใช้ gpg
  • พารามิเตอร์มากขึ้น
  • (ใช้ keyserver ที่แตกต่างกัน แต่ในกรณีนี้ฉันสงสัยว่ามันสร้างความแตกต่างเล็กน้อย)

นอกจากนี้คุณยังสามารถแสดงความคิดเห็นออกevalบรรทัดสำหรับ "dry-run": สคริปต์จากนั้นจะแสดงเฉพาะสิ่งที่ตั้งใจจะทำโดยไม่ต้องทำจริง อย่าลืมเปลี่ยนค่าของNO_PUBKEYทุกครั้งที่คุณใช้ (คุณสามารถเปลี่ยนได้KEYSERVERตามต้องการ):

NO_PUBKEY='1397BC53640DB551' # CHANGE TO THE VALUE CITED IN YOUR ERROR MESSAGE!
KEYSERVER='keys.gnupg.net'

NO_PUBKEY_LEN="${#NO_PUBKEY}"
echo "NO_PUBKEY_LEN='${NO_PUBKEY_LEN}'"     # for sanity or debugging
# note following works because bash arrays have 0-based indices
NO_PUBKEY_2ND_HALF_START=$(( NO_PUBKEY_LEN/2 ))
echo "NO_PUBKEY_2ND_HALF_START='${NO_PUBKEY_2ND_HALF_START}'" # ditto
NO_PUBKEY_2ND_HALF="${NO_PUBKEY:${NO_PUBKEY_2ND_HALF_START}}"
echo "NO_PUBKEY_2ND_HALF='${NO_PUBKEY_2ND_HALF}'"             # ditto

for CMD in \
  'date' \
  "gpg --keyserver ${KEYSERVER} --recv-keys ${NO_PUBKEY_2ND_HALF}" \
  'date' \
  "gpg -a --export ${NO_PUBKEY_2ND_HALF} | sudo apt-key add -" \
; do
  echo -e "${CMD}"
  eval "${CMD}"
done

0

เรียกใช้killall -q gpg-agentหากโซลูชันอื่นไม่ทำงาน มันอาจทำงานได้

ฉันได้รับข้อผิดพลาดที่คล้ายกันสำหรับที่เก็บ PPA บน Ubuntu 18.04 และหลังจากลองใช้วิธีแก้ปัญหาต่าง ๆ บนอินเทอร์เน็ตเมื่อเดือนที่แล้วฉันเพิ่งสะดุดกับตัวแทน gpg และฆ่ามัน จากนั้น repositries PPA sudo apt-get updateเริ่มที่จะอัปเดตในการทำ ฉันรู้ว่ามันอาจส่งผลต่อความปลอดภัย แต่บางครั้งคุณต้องการแพ็คเกจจาก PPA และ GPG ก็ไม่ยอมให้คุณ ต่อมาคุณเริ่มต้น gpg-agent อีกครั้งและสิ่งต่าง ๆ กลับสู่ปกติ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.