私のgnupgキーリングは何百もの不要なエントリを含んでいます。期限切れ、失効、未署名のキーを削除するにはどうすればよいですか。
自分の鍵に署名した鍵を保持し、必要に応じて新しい鍵をインポートします。私は以前、私の鍵の署名者のために信頼のウェブ全体をインポートしていました。私の主要な署名者の一人が彼の旅行で非常に多くの署名を手に入れたように思われます、そしてこれらは今私の鍵リングを詰まらせています。
Charles Lockhartの GPGチートシート から:
キーに関連付けられた名前として
User Name
を使用しました。それは想像力に溢れるものではありません。 Ithinkgpgのユーザー割り当てはかなり広くなっています。たとえば、私の秘密鍵の名前は「Charles Lockhart」ですが、「Lockhart」と入力するだけで参照できます」それは意味をなさない、すみません。︙
(公開鍵リングから)公開鍵を削除する:
$ gpg --delete-key "User Name"
これにより、公開鍵が公開鍵リングから削除されます。
注:この公開鍵に関連付けられている秘密鍵が秘密鍵リングにあると、エラーが発生します。あなたは最初にあなたの秘密鍵リングからこの鍵ペアのためのあなたの秘密鍵を削除しなければなりません。秘密鍵(秘密鍵リングの鍵)を削除する:
$ gpg --delete-secret-key "User Name"
これにより、秘密鍵があなたの秘密鍵リングから削除されます。
これを処理するために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
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]
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行目にあります。