web-dev-qa-db-ja.com

私のgnupgキーリングを片付けますか?

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

自分の鍵に署名した鍵を保持し、必要に応じて新しい鍵をインポートします。私は以前、私の鍵の署名者のために信頼のウェブ全体をインポートしていました。私の主要な署名者の一人が彼の旅行で非常に多くの署名を手に入れたように思われます、そしてこれらは今私の鍵リングを詰まらせています。

42
scruss

Charles Lockhartの GPGチートシート から:

キーに関連付けられた名前としてUser Nameを使用しました。それは想像力に溢れるものではありません。 Ithinkgpgのユーザー割り当てはかなり広くなっています。たとえば、私の秘密鍵の名前は「Charles Lockhart」ですが、「Lockhart」と入力するだけで参照できます」それは意味をなさない、すみません。

(公開鍵リングから)公開鍵を削除する:

$ gpg --delete-key "User Name"

これにより、公開鍵が公開鍵リングから削除されます。
注:この公開鍵に関連付けられている秘密鍵が秘密鍵リングにあると、エラーが発生します。あなたは最初にあなたの秘密鍵リングからこの鍵ペアのためのあなたの秘密鍵を削除しなければなりません。

秘密鍵(秘密鍵リングの鍵)を削除する

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

これにより、秘密鍵があなたの秘密鍵リングから削除されます。

32
MelBurslan

これを処理するために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
8
Warren Lavallee
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]
4
fche
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スクリプトがその仕事をしているところです。これは https://superuser.com/a/859739 をgpg2に適用したもので、キーIDは2行目にあります。

0
Brian