Очистити мій брелок від gnupg?


46

Мій брелок gnupg містить сотні зайвих записів. Як я можу видалити з нього прострочені, відкликані та неподписані ключі?

Я хотів би зберегти ключі, які підписали мій ключ, та імпортувати нові ключі лише за потребою. Раніше я імпортував всю мережу довіри для підписантів мого ключа. Здавалося б, один з моїх ключових підписників зібрав дуже велику кількість підписів у своїх подорожах, і зараз вони засмічують мою брелок.


1
Я б використовував gpgtools.org . Однак це не допомагає прибрати термін дії, але, безумовно, полегшує керування клавішами gpg
Нік Роз

Відповіді:


37

З чит-листа GPG Чарльза Локхарта :

Я використовував User Nameяк ім'я, пов'язане з ключем. Вибачте, що це не дуже образно. Я думаю, що gpg досить широкий у своїх завданнях користувачів, наприклад, назва мого приватного ключа - "Чарльз Локхарт", але я можу посилатися на це, просто ввівши "Локхарт". Це не має сенсу, вибачте.

            ︙

щоб видалити відкритий ключ (із дзвінка відкритого ключа):

$ gpg --delete-key "User Name"

Це видаляє відкритий ключ із вашого дзвінка відкритого ключа.
ПРИМІТКА. Якщо на вашому приватному ключі є приватний ключ, пов’язаний із цим відкритим ключем, ви отримаєте помилку! Спершу потрібно видалити приватний ключ для цієї пари ключів із приватного дзвінка.

щоб видалити приватний ключ (ключ на приватному ключі):

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

Це видаляє секретний ключ із секретного брелока.


2
Спасибі; це, принаймні, початок. Я можу використовувати його для пошуку та списку ключів, що втратили чинність:gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
scruss

"User Name"також може бути короткий відкритий ключ
nmz787

8

У мене є запланований сценарій для запуску щотижня з cron, щоб це впоратися:

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

Що знаходиться $2в awkрозділі вашого сценарію? І хоча у нього, що таке $1? Ура.
Cbhihe

Звичайний синтаксис awk для другого та першого (розділеного пробілом) поля в поточному рядку введення.
fche

Я не розумію, навіщо робити локальне очищення клавіш, а потім… завантажувати всі речі, які ви тільки що видалили, із клавішного сервера знову --refresh-keys. Я б поставив оновлення в середині сценарію, а не в кінець.
лапо

4
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]

1
Коли я виконую ці кроки, а потім перевіряю за допомогою `gpg --list-keys`, я продовжую шукати ті самі старі ключі, що втратили чинність ...
Cbhihe

5
gpg cleanне видаляє ключі з минулим терміном, лише підписи минули
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.

ось баш-скрипт, який виконує роботу. Це адаптація https://superuser.com/a/859739 для gpg2, де ідентифікатор ключа знаходиться у другому рядку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.