Làm cách nào để xóa khóa gpg mà tôi đã thêm bằng cách sử dụng khóa apt-key -?


147

Tôi không cần chìa khóa trong khóa máy chủ của tôi nữa. Có thể loại bỏ nó? Tôi đã thêm khóa bằng lệnh này:

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

Cảm ơn đã giúp đỡ


Tôi thấy câu hỏi này hữu ích vì hiện tại GUI Ubuntu 18.04 được gọi là Software & Updates-->Authenticationkhô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.
Gấu chó

Câu trả lời:


198

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><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
$

@Raymond Không có vấn đề gì :)
Nitin Venkatesh

1
À tôi thấy Id duy nhất nằm trên dòng có nhãn pub, không phải dòng có nhãn uid.
ctrl-alt-delor

6
trên Ubuntu 16.10 kết quả có vẻ hơi khác:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp 6/11/2016

Có vẻ như điều này cần được cập nhật vào ngày 18.04
kennyB

Sau khi xóa chìa khóa, tôi gặp phải một vấn đề mới 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?
Corey

127

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


17
Rất hữu ích, cảm ơn bạn. Điều này là vô cùng vô ích UX.
SColvin

11
@SColvin bạn chỉ có thể làm 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).
baptx

1
Rất hữu ích, rất đúng cho 17.10!
Hartmut P.

2
Và cho 18.04.1.
Russ BHRan

Cảm ơn bạn. Quyết định thiết kế khủng khiếp.
Brian Smith

4

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ó jcameronhơ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ường
  • grep '${UNIQUE}' -B 1: chỉ lấy dòng chứa chuỗi khóa duy nhất jcameron-B 1dò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ó pupid khóa
  • cut -d " " -f 4: lấy từ thứ 4 của dòng đó (đầu tiên là pubhơ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

Tôi chạy cái này mà không có tham số và nó chỉ xóa sạch tất cả các phím của tôi. ; (
Hội chợ Gabriel

Nếu bất cứ ai khác có chìa khóa của họ bị xóa, tôi có thể sửa nó bằng cách làm theo các hướng dẫn sau: askubfox.com/a/145933/13693
Gabriel Fair

Hả? Làm sao chuyện này lại xảy ra? Nó sẽ thoát với "Không cung cấp tên khóa" nếu không có tham số ..
derHugo

@derHugo không chắc nhưng có thể là #trong mệnh đề if đó là thủ phạm?
defuzed

@defuzed nếu bạn có ý $#thì không. Nó trả về số lượng tham số đã cho.
derHugo

2

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 FOOBARlà 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 FOOBARlà tên UID.


1
Tôi không chắc tại sao, nhưng tôi đã gặp lỗi khi tôi cố chạy 16.04lệ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
Gabriel Fair

@GabrielFair Cảm ơn bạn đã chú ý, hồi tháng sáu nó đã hoạt động (tôi đã sao chép nó từ bảng điều khiển của mình) nhưng bây giờ có vẻ như đã được cập nhật và 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)
David Tabernero M.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.