Bagaimana saya bisa menghapus kunci gpg yang saya tambahkan menggunakan apt-key add -?

147

Saya tidak perlu lagi kunci di kunci server saya. Apakah mungkin untuk menghapusnya? Saya menambahkan kunci menggunakan perintah ini:

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

Terima kasih telah membantu

Raymond
sumber
Saya menemukan pertanyaan ini bermanfaat karena saat ini Ubuntu 18.04 GUI yang disebut Software & Updates-->Authenticationsepertinya tidak berfungsi (tidak dapat menghapus kunci perangkat lunak tepercaya). Sebaliknya, cli cmds yang diberikan di bawah ini harus digunakan.
Sun Bear

Jawaban:

198

Pertama, Anda perlu menemukan id kunci dari kunci yang Anda tambahkan. Lakukan ini dengan perintah:

sudo apt-key list

Ini akan mencantumkan semua kunci yang Anda miliki, dengan setiap entri tampak seperti ini:

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

Setelah Anda mengetahui kunci mana yang harus dihapus, gunakan perintah di sudo apt-key del <keyid>mana <keyid>diganti dengan keyid sebenarnya dari kunci yang ingin Anda hapus dari keyring Anda.

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
Nitin Venkatesh
sumber
@Raymond, Tidak masalah :)
Nitin Venkatesh
1
Ah saya melihat ID unik ada di baris berlabel pub, bukan baris berlabel uid.
ctrl-alt-delor
6
di ubuntu 16.10 hasil tampaknya sedikit berbeda:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp
Sepertinya ini perlu diperbarui untuk 18,04
kennyB
Setelah menghapus kunci, saya menemukan masalah baru The following signatures couldn't be verified because the public key is not available: NO_PUBKEY, apa yang harus saya lakukan selanjutnya?
Corey
127

Pada 16.10 id kunci pendek tidak lagi ditampilkan ketika Anda menggunakan perintah daftar, tetapi sebenarnya 8 karakter terakhir dari hex panjang.

Jadi misalnya id kunci untuk kunci berikut

/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) <[email protected]>

Id kuncinya adalah EFE21092

Wesam
sumber
17
Sangat membantu, terima kasih. Ini adalah UX yang sangat tidak membantu.
SColvin
11
@Scolvin yang bisa Anda lakukan sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"dan saya pikir lebih aman menggunakan seluruh sidik jari, keyid bisa memiliki duplikat (setidaknya ketika Anda menggunakan PGP untuk email, saya membaca Anda harus membagikan seluruh sidik jari Anda dan bukan hanya keyid).
baptx
1
Sangat membantu, sangat benar juga untuk 17.10!
Hartmut P.
2
Dan untuk 18.04.1.
Russ Bateman
Terima kasih. Keputusan desain yang buruk.
Brian Smith
4

Saya membuat skrip pendek untuk mempermudah dan menggunakan string, bukan id.

Anda dapat menggunakan skrip saya jika kunci berisi string unik yang Anda tahu.
misalnya dalam kasus saya untuk webmin

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <[email protected]>
sub   1024g/1B24BE83 2002-02-28

Saya yakin hanya kunci webmin pada sistem saya yang memiliki jcamerondaripada saya menggunakan skrip ini untuk menghapus kunci yang sesuai.

Saya menyimpannya sebagai ~/removeAptKey

dan jalankan sebagai

sudo ./removeAptKey jcameron

Seharusnya ouput seperti itu

KEYID: 11F63C51
OK

Ini skrip saya:

#!/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

Pertama saya mendapatkan dua baris teratas dari blok kunci saya:

  • sudo apt-key list: daftar kunci apt seperti biasa
  • grep '${UNIQUE}' -B 1: ambil hanya baris yang berisi string kunci unik jcamerondan -B 1baris sebelumnya
  • > result.temp: Simpan dalam file (yang kemudian dihapus)

Jika ini mengembalikan tepat 2 baris (-> mendapat tepat 1 kunci) saya pindah:

  • grep 'pub': Sekarang ambil hanya baris dengan pupid kunci
  • cut -d " " -f 4: ambil kata ke-4 dari baris itu (yang pertama adalah pubdari datang dua spasi, daripada string yang kita cari ``)
  • cut -d "/" -f 2: ambil hanya bagian sesudahnya /

Dan akhirnya hapus kunci dan pembersihan ini

  • apt-key del ${KEYID}(dalam kasus saya 11F63C51)
  • rm result.temp: tidak perlu file ini lagi
derHugo
sumber
Saya menjalankan ini tanpa parameter dan itu hanya menghapus semua kunci saya. ; (
Gabriel Fair
Jika ada orang lain yang kehilangan kunci, saya dapat memperbaikinya dengan mengikuti instruksi ini: askubuntu.com/a/145933/13693
Gabriel Fair
Hu? Bagaimana ini bisa terjadi? Itu harus keluar dengan "Tidak ada nama kunci yang disediakan" jika tidak ada parameter ..
derHugo
@ DerHugo tidak yakin tetapi mungkinkah #bahwa jika klausa adalah penyebabnya?
Defuzed
@defuzed jika Anda maksud $#maka tidak. Ini mengembalikan jumlah parameter yang diberikan.
derHugo
2

Saya tahu saya mungkin terlambat, tetapi hanya ingin membagikan perintah satu baris ini untuk mencapai ini.

CATATAN : Ini hanya akan berfungsi jika output adalah kunci unik.


Versi Ubuntu hingga 16,04 (DIPERBARUI 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 "/")

dimana FOOBARnama UID.


Versi Ubuntu mulai 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}')

dimana FOOBARnama UID.

David Tabernero M.
sumber
1
Saya tidak yakin mengapa, tetapi saya mendapat kesalahan ketika saya mencoba menjalankan 16.04perintah yang Anda berikan. awk: line 1: syntax error at or near {Tetapi kawat sudut cocok, jadi saya tidak yakin mengapa ini tidak berhasil
Gabriel Fair
@GabrielFair Terima kasih telah memperhatikan, kembali pada bulan Juni ini telah berfungsi (saya menyalin-menempelkannya dari konsol saya) tetapi sekarang tampaknya telah diperbarui dan apt-key listformatnya telah berubah. Sekarang sepertinya berfungsi kembali. (EDIT: Ingatlah untuk menjalankan ini sebagai pengguna super)
David Tabernero M.