Jawaban:
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
$
pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY
, apa yang harus saya lakukan selanjutnya?
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) <cdimage@ubuntu.com>
Id kuncinya adalah EFE21092
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).
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 <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
Saya yakin hanya kunci webmin pada sistem saya yang memiliki jcameron
daripada 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 biasagrep '${UNIQUE}' -B 1
: ambil hanya baris yang berisi string kunci unik jcameron
dan -B 1
baris 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 pup
id kuncicut -d " " -f 4
: ambil kata ke-4 dari baris itu (yang pertama adalah pub
dari 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#
bahwa jika klausa adalah penyebabnya?
$#
maka tidak. Ini mengembalikan jumlah parameter yang diberikan.
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 FOOBAR
nama 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 FOOBAR
nama UID.
16.04
perintah yang Anda berikan. awk: line 1: syntax error at or near {
Tetapi kawat sudut cocok, jadi saya tidak yakin mengapa ini tidak berhasil
apt-key list
formatnya telah berubah. Sekarang sepertinya berfungsi kembali. (EDIT: Ingatlah untuk menjalankan ini sebagai pengguna super)
Software & Updates-->Authentication
sepertinya tidak berfungsi (tidak dapat menghapus kunci perangkat lunak tepercaya). Sebaliknya, cli cmds yang diberikan di bawah ini harus digunakan.