ฉันจะลบคีย์ gpg ที่ฉันเพิ่มโดยใช้ปุ่ม apt-key ได้อย่างไร?


147

ฉันไม่ต้องการรหัสในเซิร์ฟเวอร์ของฉันอีกต่อไป เป็นไปได้ไหมที่จะลบออก? ฉันเพิ่มคีย์โดยใช้คำสั่งนี้:

 curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -

ขอบคุณสำหรับการช่วยเหลือ


ฉันพบว่าคำถามนี้มีประโยชน์เพราะขณะนี้ Ubuntu 18.04 GUI ที่เรียกว่าSoftware & Updates-->Authenticationดูเหมือนจะไม่ทำงาน (ไม่สามารถลบคีย์ซอฟต์แวร์ใด ๆ ที่เชื่อถือได้) แต่จะใช้ cli cmds ด้านล่างแทน
Sun Bear

คำตอบ:


198

ก่อนอื่นคุณต้องค้นหารหัสคีย์ของรหัสที่คุณเพิ่ม ทำสิ่งนี้โดยคำสั่ง:

sudo apt-key list

มันจะแสดงรายการคีย์ทั้งหมดที่คุณมีโดยแต่ละรายการจะมีลักษณะดังนี้:

pub   1024R/B455BEF0 2010-07-29
uid                  Launchpad clicompanion-nightlies

เมื่อคุณทราบว่าจะลบคีย์ใดให้ใช้คำสั่งsudo apt-key del <keyid>ที่<keyid>ถูกแทนที่ด้วยหมายเลขประจำตัวจริงของคีย์ที่คุณต้องการลบออกจากพวงกุญแจของคุณ

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$

@Raymond ไม่มีปัญหา :)
Nitin Venkatesh

1
อ่าฉันเห็นว่ารหัสที่ไม่ซ้ำกันนั้นอยู่บนบรรทัดที่มีชื่อว่า pub ไม่ใช่บรรทัดที่มีป้ายกำกับว่า uid
ctrl-alt-delor

6
บน ubuntu 16.10 ผลลัพธ์ดูเหมือนแตกต่างกันเล็กน้อย:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp

ดูเหมือนว่าจะต้องมีการอัพเดทสำหรับ 18.04
kennyB

หลังจากลบคีย์ฉันพบปัญหาใหม่The following signatures couldn't be verified because the public key is not available: NO_PUBKEYฉันควรทำอย่างไรต่อไป
Corey

127

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

ตัวอย่างเช่นรหัสคีย์สำหรับคีย์ต่อไปนี้

/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg
------------------------------------------------------
pub   rsa4096 2012-05-11 [SC]
      8439 38DF 228D 22F7 B374  2BC0 D94A A3F0 EFE2 1092
uid           [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>

รหัสสำคัญจะเป็น EFE21092


17
มีประโยชน์มากขอบคุณ นี่เป็น UX ที่ไม่มีประโยชน์อย่างยิ่ง
SColvin

11
@ SColvin คุณสามารถทำได้sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"และฉันคิดว่ามันปลอดภัยกว่าที่จะใช้ทั้งลายนิ้วมือ, keyid อาจมีซ้ำกัน (อย่างน้อยเมื่อคุณใช้ PGP สำหรับอีเมล, ฉันอ่านแล้วคุณควรแบ่งปันลายนิ้วมือของคุณทั้งหมดไม่ใช่เฉพาะรหัส)
baptx

1
มีประโยชน์มากจริงมากสำหรับ 17.10!
Hartmut P.

2
และสำหรับ 18.04.1
Russ Bateman

ขอขอบคุณ. การตัดสินใจออกแบบที่น่ากลัว
Brian Smith

4

ฉันทำสคริปต์สั้น ๆ เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้นและใช้สตริงแทนรหัส

คุณสามารถใช้สคริปต์ของฉันหากคีย์มีสตริงที่ไม่ซ้ำกันที่คุณรู้จัก
เช่นในกรณีของฉันสำหรับ webmin

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <jcameron@webmin.com>
sub   1024g/1B24BE83 2002-02-28

ฉันแน่ใจว่ามีเพียงคีย์ webmin ในระบบของjcameronฉันเท่านั้นที่ใช้สคริปต์นี้เพื่อลบคีย์ที่เกี่ยวข้อง

ฉันบันทึกมันเป็น ~/removeAptKey

และเรียกใช้เป็น

sudo ./removeAptKey jcameron

ouput ควรเป็นสิ่งที่ต้องการ

KEYID: 11F63C51
OK

นี่คือสคริปต์ของฉัน:

#!/bin/bash

function printKeys(){
    echo "Installed keys are"
    echo ""
    sudo apt-key list
}

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

if [[ $# -eq 0 ]]
then
    echo "No key name provided"
    exit 1
fi

UNIQUE=$1

sudo apt-key list | grep "${UNIQUE}" -B 1 > result.temp

LENGTH=$(cat result.temp | wc -l)

if [[ ${LENGTH} -gt 2 ]]
then
    echo "Attention you found more than 1 key. Use a more specific string."
    printKeys
    exit 2
fi

if [[ ${LENGTH} != 2 ]]
then
    echo "Key not found. Doing nothing."
    printKeys
    exit 3
fi

KEYID=$(cat result.temp | grep 'pub' | cut -d " " -f 4 | cut -d "/" -f 2)
echo "KEYID: "$KEYID

apt-key del ${KEYID}

rm result.temp

ก่อนอื่นฉันจะได้บล็อกของกุญแจสองบรรทัด:

  • sudo apt-key list: แสดงรายการคีย์ apt ตามปกติ
  • grep '${UNIQUE}' -B 1: ใช้เฉพาะสายที่มีสตริงคีย์เฉพาะjcameronและ-B 1บรรทัดก่อน
  • > result.temp: บันทึกไว้ในไฟล์ (ซึ่งจะถูกลบออกในภายหลัง)

หากสิ่งนี้คืนกลับมาอย่างแน่นอน 2 บรรทัด (-> ได้รับ 1 คีย์ที่แน่นอน) ฉันไปต่อ:

  • grep 'pub': ตอนนี้ใช้เฉพาะบรรทัดที่มีpupรหัสคีย์
  • cut -d " " -f 4: ใช้คำที่ 4 ของบรรทัดนั้น (อันแรกคือpubช่องว่างสองช่องเกินกว่าสตริงที่เราอยู่หลัง ``)
  • cut -d "/" -f 2: ใช้เวลาเพียงส่วนหลัง /

และในที่สุดก็ลบคีย์นี้และทำความสะอาด

  • apt-key del ${KEYID}(ในกรณีของฉัน11F63C51)
  • rm result.temp: ไม่ต้องการไฟล์นี้อีกต่อไป

ฉันรันสิ่งนี้โดยไม่มีพารามิเตอร์และมันเช็ดกุญแจทั้งหมดของฉันออกไป ; (
Gabriel Fair

หากใครอื่นมีกุญแจของพวกเขา wipped ฉันก็สามารถแก้ไขได้โดยทำตามคำแนะนำเหล่านี้: askubuntu.com/a/145933/13693
Gabriel Fair

หู? มันเกิดขึ้นได้อย่างไร? มันควรจะออกด้วย "ไม่มีชื่อคีย์ให้" ถ้ามีพารามิเตอร์ไม่มี ..
derHugo

@derHugo ไม่แน่ใจ แต่เป็นไปได้#ไหมถ้าประโยคนั้นเป็นผู้กระทำผิด
defuzed

@defuzed ถ้าคุณหมายถึง$#ไม่มี ส่งคืนจำนวนพารามิเตอร์ที่กำหนด
derHugo

2

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

หมายเหตุ : วิธีนี้จะใช้งานได้หากเอาต์พุตเป็นคีย์เฉพาะ


Ubuntu เวอร์ชันสูงสุด 16.04 (อัพเดท 2018-12-22):

apt-key del $(apt-key list | awk 'NR=='$(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":")'{print;exit}' | awk '{print $2}' | cut --fields 2 --delimiter "/")

ที่FOOBARเป็นชื่อโพสต์


รุ่นของ Ubuntu ตั้งแต่ 16.10:

apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":") - 1`'{print;exit}')

ที่FOOBARเป็นชื่อโพสต์


1
ฉันไม่แน่ใจว่าทำไม แต่ฉันได้รับข้อผิดพลาดเมื่อฉันพยายามเรียกใช้16.04คำสั่งที่คุณให้ไว้ awk: line 1: syntax error at or near {แต่วงเล็บปีกกาจับคู่ดังนั้นฉันไม่แน่ใจว่าทำไมสิ่งนี้ไม่ทำงาน
Gabriel Fair

@GabrielFair ขอบคุณที่สังเกตเห็นมันกลับมาแล้วในเดือนมิถุนายนมันใช้งานได้ (ฉันคัดลอกมาจากคอนโซล) แต่ตอนนี้ดูเหมือนว่ามันได้รับการปรับปรุงแล้วและapt-key listรูปแบบก็เปลี่ยนไป ตอนนี้ดูเหมือนว่าจะทำงานอีกครั้ง (แก้ไข: อย่าลืมเรียกใช้สิ่งนี้ในฐานะ superuser)
David Tabernero M.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.