ฉันไม่ต้องการรหัสในเซิร์ฟเวอร์ของฉันอีกต่อไป เป็นไปได้ไหมที่จะลบออก? ฉันเพิ่มคีย์โดยใช้คำสั่งนี้:
curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
ขอบคุณสำหรับการช่วยเหลือ
ฉันไม่ต้องการรหัสในเซิร์ฟเวอร์ของฉันอีกต่อไป เป็นไปได้ไหมที่จะลบออก? ฉันเพิ่มคีย์โดยใช้คำสั่งนี้:
curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
ขอบคุณสำหรับการช่วยเหลือ
คำตอบ:
ก่อนอื่นคุณต้องค้นหารหัสคีย์ของรหัสที่คุณเพิ่ม ทำสิ่งนี้โดยคำสั่ง:
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
$
pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY
ฉันควรทำอย่างไรต่อไป
ในวันที่ 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
sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"
และฉันคิดว่ามันปลอดภัยกว่าที่จะใช้ทั้งลายนิ้วมือ, keyid อาจมีซ้ำกัน (อย่างน้อยเมื่อคุณใช้ PGP สำหรับอีเมล, ฉันอ่านแล้วคุณควรแบ่งปันลายนิ้วมือของคุณทั้งหมดไม่ใช่เฉพาะรหัส)
ฉันทำสคริปต์สั้น ๆ เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้นและใช้สตริงแทนรหัส
คุณสามารถใช้สคริปต์ของฉันหากคีย์มีสตริงที่ไม่ซ้ำกันที่คุณรู้จัก
เช่นในกรณีของฉันสำหรับ 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
: ไม่ต้องการไฟล์นี้อีกต่อไป#
ไหมถ้าประโยคนั้นเป็นผู้กระทำผิด
$#
ไม่มี ส่งคืนจำนวนพารามิเตอร์ที่กำหนด
ฉันรู้ว่าฉันอาจจะมาสาย แต่อยากจะแบ่งปันคำสั่งแบบบรรทัดเดียวนี้เพื่อให้บรรลุสิ่งนี้
หมายเหตุ : วิธีนี้จะใช้งานได้หากเอาต์พุตเป็นคีย์เฉพาะ
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
เป็นชื่อโพสต์
16.04
คำสั่งที่คุณให้ไว้ awk: line 1: syntax error at or near {
แต่วงเล็บปีกกาจับคู่ดังนั้นฉันไม่แน่ใจว่าทำไมสิ่งนี้ไม่ทำงาน
apt-key list
รูปแบบก็เปลี่ยนไป ตอนนี้ดูเหมือนว่าจะทำงานอีกครั้ง (แก้ไข: อย่าลืมเรียกใช้สิ่งนี้ในฐานะ superuser)
Software & Updates-->Authentication
ดูเหมือนจะไม่ทำงาน (ไม่สามารถลบคีย์ซอฟต์แวร์ใด ๆ ที่เชื่อถือได้) แต่จะใช้ cli cmds ด้านล่างแทน