Câu trả lời:
Trước tiên, bạn cần tìm id khóa của khóa bạn đã thêm. Làm điều này bằng lệnh:
sudo apt-key list
Nó sẽ liệt kê tất cả các khóa mà bạn có, với mỗi mục trông như thế này:
pub 1024R/B455BEF0 2010-07-29
uid Launchpad clicompanion-nightlies
Một khi bạn đã tìm ra được chìa khóa để loại bỏ, sử dụng lệnh sudo apt-key del <keyid>
mà <keyid>
được thay thế bằng keyid thực tế của khóa bạn muốn loại bỏ từ keyring của bạn.
$ 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
, tôi nên làm gì tiếp theo?
Vào ngày 16.10, id khóa ngắn không còn hiển thị khi bạn sử dụng lệnh list, nhưng thực tế nó là 8 ký tự cuối cùng của hex dài.
Vì vậy, ví dụ id khóa cho khóa sau
/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>
Id khóa sẽ là EFE21092
sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"
và tôi nghĩ an toàn hơn khi sử dụng toàn bộ dấu vân tay, keyid có thể có các bản sao (ít nhất là khi bạn sử dụng PGP cho email, tôi đọc bạn nên chia sẻ toàn bộ dấu vân tay của mình chứ không chỉ là keyid).
Tôi đã tạo một kịch bản ngắn để làm cho mọi thứ dễ dàng hơn và sử dụng một chuỗi thay vì id.
Bạn có thể sử dụng tập lệnh của tôi nếu khóa chứa một chuỗi duy nhất bạn biết.
ví dụ trong trường hợp của tôi cho webmin
pub 1024D/11F63C51 2002-02-28
uid Jamie Cameron <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
Tôi chắc chắn chỉ có khóa webmin trên hệ thống của tôi có jcameron
hơn tôi sử dụng tập lệnh này để xóa khóa theo.
Tôi đã lưu nó dưới dạng ~/removeAptKey
và chạy nó như
sudo ./removeAptKey jcameron
Thông số nên là một cái gì đó như
KEYID: 11F63C51
OK
Đây là kịch bản của tôi:
#!/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
Đầu tiên tôi nhận được hai dòng trên của khối khóa của mình:
sudo apt-key list
: liệt kê các khóa apt như bình thườnggrep '${UNIQUE}' -B 1
: chỉ lấy dòng chứa chuỗi khóa duy nhất jcameron
và -B 1
dòng trước> result.temp
: Lưu nó trong một tệp (cái này sẽ bị xóa sau)Nếu điều này trả về đúng 2 dòng (-> có chính xác 1 khóa), tôi chuyển sang:
grep 'pub'
: Bây giờ chỉ lấy dòng có pup
id khóacut -d " " -f 4
: lấy từ thứ 4 của dòng đó (đầu tiên là pub
hơn hai khoảng trắng, hơn chuỗi chúng ta đứng sau ``)cut -d "/" -f 2
: chỉ lấy phần sau /
Và cuối cùng xóa khóa này và dọn dẹp
apt-key del ${KEYID}
(trong trường hợp của tôi 11F63C51
)rm result.temp
: không cần tập tin này nữa#
trong mệnh đề if đó là thủ phạm?
$#
thì không. Nó trả về số lượng tham số đã cho.
Tôi biết tôi có thể bị trễ, nhưng chỉ muốn chia sẻ lệnh một dòng này để đạt được điều này.
LƯU Ý : Điều này sẽ chỉ hoạt động nếu đầu ra là một khóa duy nhất.
Các phiên bản Ubuntu lên đến 16.04 (CẬP NHẬT 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 "/")
nơi FOOBAR
là tên UID.
Các phiên bản Ubuntu từ 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}')
nơi FOOBAR
là tên UID.
16.04
lệnh bạn cung cấp. awk: line 1: syntax error at or near {
Nhưng niềng răng góc khớp, vì vậy tôi không chắc tại sao nó không hoạt động
apt-key list
định dạng đã thay đổi. Bây giờ nó dường như đang hoạt động trở lại. (EDIT: Hãy nhớ chạy cái này như siêu người dùng)
Software & Updates-->Authentication
không hoạt động (nó không thể xóa bất kỳ khóa phần mềm đáng tin cậy nào). Thay vào đó, các cmi cli đưa ra dưới đây phải được sử dụng.