gnupgキーリングをクリーンアップしますか?


46

私のgnupgキーリングには、何百もの不要なエントリが含まれています。期限切れ、失効、および署名されていないキーを削除するにはどうすればよいですか?

キーに署名したキーを保持し、必要な場合にのみ新しいキーをインポートしたいと思います。以前に、キーの署名者の信頼の網全体をインポートしました。私のキー署名者の1人が彼の旅行で非常に多くの署名を拾い上げたように見えますが、これらは私のキーリングを詰まらせています。


1
私はgpgtools.orgを使用します。これは、しかし、削除するには、ヘルプの有効期限が切れていませんが、間違いなくGPGキーの管理容易にします
ニック・ロズ

回答:


37

Charles Lockhartの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から毎週実行するようにスケジュールされたbashスクリプトがあります。

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

スクリプト$2awkセクションには何がありますか?そして、その間、何$1ですか?乾杯。
Cbhihe

現在の入力行の2番目と1番目の(スペース区切り)フィールドの通常のawk構文。
fche

キーのローカルクリーンアップを行ってから...でキーサーバーから削除したばかりのすべてのものを再びダウンロードする理由がわかりません--refresh-keys。最後ではなく、スクリプトの中央に更新を配置しました。
lapo

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`で確認すると、同じ古い期限切れキーを
取得し続け

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.

仕事をしているbashスクリプトです。これは、キーIDが2行目にあるgpg2 のhttps://superuser.com/a/859739の適応です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.