Bersihkan keyring gnupg saya?

46

Gnupg keyring saya berisi ratusan entri yang tidak perlu. Bagaimana saya menghapus kunci yang sudah kadaluwarsa, dicabut, dan tidak ditandatangani?

Saya ingin menyimpan kunci yang telah menandatangani kunci saya, dan mengimpor kunci baru hanya jika diperlukan. Saya sebelumnya mengimpor seluruh web kepercayaan untuk penandatangan kunci saya. Tampaknya salah satu penandatangan kunci saya telah mengambil sejumlah besar tanda tangan dalam perjalanannya, dan ini sekarang menyumbat keyring saya.

scruss
sumber
1
Saya akan menggunakan gpgtools.org . Ini tidak membantu menghapus kadaluarsa, tetapi pasti memudahkan manajemen kunci gpg
Nick Roz

Jawaban:

37

Dari Lembar Cheat GPG Charles Lockhart :

Saya telah menggunakan User Namesebagai nama yang terkait dengan kunci. Maaf itu tidak terlalu imajinatif. Saya pikir gpg cukup luas dalam tugas penggunanya, misalnya, nama untuk kunci pribadi saya adalah "Charles Lockhart", tetapi saya dapat merujuknya dengan hanya memasukkan "Lockhart". Itu tidak masuk akal, maaf.

            ︙

untuk menghapus kunci publik (dari cincin kunci publik Anda):

$ gpg --delete-key "User Name"

Ini menghapus kunci publik dari cincin kunci publik Anda.
CATATAN: Jika ada kunci pribadi pada cincin kunci pribadi Anda yang terkait dengan kunci publik ini, Anda akan mendapatkan kesalahan! Anda harus menghapus kunci pribadi Anda untuk pasangan kunci ini dari dering kunci pribadi Anda terlebih dahulu.

untuk menghapus kunci pribadi (kunci pada cincin kunci pribadi Anda):

$ gpg --delete-secret-key "User Name"

Ini menghapus kunci rahasia dari cincin kunci rahasia Anda.

MelBurslan
sumber
2
Terima kasih; setidaknya itu awal. Saya dapat menggunakannya untuk mencari dan mendaftar kunci yang sudah kadaluarsa:gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
scruss
"User Name"juga bisa menjadi kunci publik singkat
nmz787
8

Saya memiliki skrip bash yang dijadwalkan untuk menjalankan mingguan dari cron untuk menangani ini:

#!/bin/bash
# Clean up the GPG Keyring.  Keep it tidy.
# blog.lavall.ee

echo -n "Expired Keys: "
for expiredKey in $(gpg2 --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 ); do
    echo -n "$expiredKey"
    gpg2 --batch --quiet --delete-keys $expiredKey >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

echo -n "Update Keys: "
for keyid in $(gpg -k | grep ^pub | grep -v expired: | grep -v revoked: | cut -d/ -f2 | cut -d' ' -f1); do
    echo -n "$keyid"
    gpg2 --batch --quiet --edit-key "$keyid" check clean cross-certify save quit > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

gpg2 --batch --quiet --refresh-keys > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "Refresh OK"
else
     echo "Refresh FAIL."
fi
Warren Lavallee
sumber
Apa yang ada $2di awkbagian skrip Anda? Dan sementara itu, apa itu $1? Tepuk tangan.
Cbhihe
Sintaks awk normal untuk bidang kedua dan pertama (dipisahkan spasi) pada baris input saat ini.
fche
Saya tidak mengerti mengapa melakukan pembersihan kunci lokal dan kemudian ... mengunduh semua hal yang baru saja Anda hapus dari keyserver lagi --refresh-keys. Saya akan menempatkan penyegaran di tengah naskah, bukan akhir.
Lapo
4
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]
fche
sumber
1
Ketika saya mengikuti langkah-langkah itu dan kemudian memeriksa dengan `gpg --list-keys` Saya tetap melihat kunci yang sudah kadaluarsa yang sama ...
Cbhihe
5
gpg cleantidak menghapus kunci kedaluwarsa, hanya tanda tangan kedaluwarsa
fche
0
echo -n "Expired Keys: "
list_expired_keys="$(gpg2 --list-keys | grep -1 pub | sed 'N;s/\n/ /' | awk '/^pub.* \[expired\: / {id=$7; sub(/^.*\//, "", id); print id}' | fmt -w 999)";
list_revoked_keys="$(gpg2 --list-keys | grep -1 pub | sed 'N;s/\n/ /' | awk '/^pub.* \[revoked\: / {id=$7; sub(/^.*\//, "", id); print id}' | fmt -w 999)";
for key in $list_expired_keys $list_revoked_keys; do
    echo -n "$key"
    gpg2 --batch --quiet --delete-keys $key >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

di sini adalah bash-script yang melakukan pekerjaan. Ini adalah adaptasi dari https://superuser.com/a/859739 untuk gpg2 di mana id kunci berada di baris kedua.

Brian
sumber