38

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

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

3 ответа3

26

Из шпаргалки GPG Чарльза Локхарта:

Я использовал User Name как имя, связанное с ключом.  Извините, это не очень оригинально.  Я думаю, что у gpg достаточно широкие пользовательские назначения, например, мой закрытый ключ называется "Чарльз Локхарт", но я могу сослаться на это, просто вставив "Локхарт".  Это не имеет никакого смысла, извините.

            ︙

чтобы удалить открытый ключ (из вашего каталога открытых ключей):

$ gpg --delete-key "User Name"

Это удалит открытый ключ из вашего кольца открытых ключей.
ПРИМЕЧАНИЕ. Если в вашем кольце секретных ключей есть закрытый ключ, связанный с этим открытым ключом, вы получите сообщение об ошибке! Сначала вы должны удалить свой личный ключ для этой пары ключей из своего личного ключа.

удалить личный ключ (ключ на вашем личном кольце ключей):

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

Это удалит секретный ключ из вашего секретного набора ключей.

7

У меня есть скрипт bash, который должен запускаться еженедельно из 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
4
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .