清理我的gnupg密钥环?


46

我的gnupg密钥环包含数百个不必要的条目。如何从中删除已过期,已撤销和未签名的密钥?

我想保留已签名我的密钥的密钥,并仅根据需要导入新密钥。以前,我已经为密钥的签名者导入了整个信任网络。似乎我的一个关键签名者在他的旅行中捡起了大量签名,这些签名现在阻塞了我的钥匙圈。


1
我会使用gpgtools.org。不过,这无助于删除过期的文件,但绝对可以简化gpg密钥的管理
Nick Roz

Answers:


37

摘自查尔斯·洛克哈特(Charles Lockhart)的GPG备忘单

我曾经User Name是与密钥关联的名称。抱歉,这不是很有想象力。我认为 gpg的用户分配非常广泛,例如,我的私钥的名称是“ Charles Lockhart”,但是我可以通过输入“ Lockhart”来引用它。抱歉,这没有任何意义。

            ︙

删除公钥(从您的公钥环中删除):

$ 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

我有一个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

是什么$2awk你的脚本的部分?而在什么时候$1呢?干杯。
Cbhihe

当前输入行中第二个和第一个(以空格分隔)字段的常规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`时,我一直在使用相同的旧过期密钥...
Cbhihe 17-4-26

5
gpg clean不会删除过期的密钥,而仅删除过期的签名
2017年

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脚本。它是gpg2 的https://superuser.com/a/859739的改编,其中密钥ID在第二行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.