Answers:
摘自查尔斯·洛克哈特(Charles Lockhart)的GPG备忘单:
我曾经
User Name
是与密钥关联的名称。抱歉,这不是很有想象力。我认为 gpg的用户分配非常广泛,例如,我的私钥的名称是“ Charles Lockhart”,但是我可以通过输入“ Lockhart”来引用它。抱歉,这没有任何意义。︙
删除公钥(从您的公钥环中删除):
$ gpg --delete-key "User Name"
这将从您的公共密钥环中删除公共密钥。
注意:如果您的私钥环上有一个与此公钥关联的私钥,您将得到一个错误!您必须先从私钥环中删除该私钥对的私钥。删除私钥(私钥环上的密钥):
$ gpg --delete-secret-key "User Name"
这将从您的密钥环中删除密钥。
gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
"User Name"
也可以是短公钥
我有一个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
$2
在awk
你的脚本的部分?而在什么时候$1
呢?干杯。
--refresh-keys
。我将刷新放在脚本的中间,而不是结尾。
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]
gpg clean
不会删除过期的密钥,而仅删除过期的签名
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脚本。它是gpg2 的https://superuser.com/a/859739的改编,其中密钥ID在第二行。