如何在没有指纹的情况下强制删除 gpg 密钥?

如何在没有指纹的情况下强制删除 gpg 密钥?

它意外地在 GPG 密钥环中生成了大量密钥(没有公钥),我编写了一个脚本来删除这些密钥,但是 GPG 不允许我这样做:

$ gpg --batch --yes --delete-secret-keys KEYS
gpg: can't do this in batch mod
gpg: (unless you specify the key by fingerprint)

我很清楚我在做什么,也知道可能有重复的 key-id,但似乎没有办法强制删除它们,尽管下面的方法也不起作用:

$ yes | gpg --delete-secret-keys KEYS

任何想法?

答案1

用于gpg --list-secret-keys --with-colons --fingerprint生成易于解析的格式的指纹列表。抓取与要删除的键相对应的表单行,并传递指纹(fpr:::::::::xxxx:xxxx) 到gpg --batch --delete-secret-keys

以下命令将生成所有密钥指纹。请务必仅选择要删除的密钥指纹!

gpg --list-secret-keys --with-colons --fingerprint | sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p'

答案2

我知道这个话题已经很老了,而且答案有点像 Gilles 的答案,但我认为它完全回答了这个问题(因为我遇到了与 OP 同样的难题):

for i in `gpg --with-colons --fingerprint | grep "^fpr" | cut -d: -f10`; do gpg --batch --delete-secret-keys "$i" ; done

答案3

我将 Gilles 和 Dolanor 的答案合并到这个行中,如果你想删除特定的键,这个行很有用:

gpg --fingerprint --with-colons ${GPG_KEY} |\
    grep "^fpr" |\
    sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p' |\
    xargs gpg --batch --delete-secret-keys

没有回答原始问题,但可能对其他人有用。

答案4

导出您想要保留的密钥,删除文件,然后重新创建您的环。

相关内容