Gpg
列出由給定密鑰簽名的所有密鑰
使用GNU Privacy Guard (GnuPG):對於某個給定的密鑰,例如
0xDEADBEEF
,使用者如何輕鬆地僅列出其密鑰環中具有已由該密鑰簽名的 UID 的公鑰?如果您可以指定您的答案是否適用於 GnuPG Modern (2.1.x)、GnuPG Stable (2.0.x) 或 GnuPG Classic (1.4.x),將會很有幫助。
據我所知,沒有這樣的選擇。然而,將一個腳本一起編寫是微不足道的:
#!/bin/sh KEY=${1:-'C840C4F6'} # that's my key gpg -k | grep 'pub ' | cut -d ' ' -f 4 | cut -d / -f 2 | while read x; do if gpg --list-sigs "$x" | grep C840C4F6 >/dev/null; then echo "$x" fi done
而且,由於 GnuPG 非常快,它執行得足夠快。在便宜的 VPS 上執行不到一秒的 >300 個密鑰。
兩者都是非常古老的
-k
選擇。我只在 2.0 和 2.1 上對此進行了測試,但我相信它可以在 1.4 上執行。--list-sigs``gpg
GnuPG 中沒有這樣的選項,但是您可以使用一個簡單的腳本來列出所有匹配的鍵。與@grochmal 的腳本相比,讀取 GnuPG 的
--with-colons
輸出格式(旨在以程式方式解析)的惡意輸入速度更快、更健壯。我還限制了一個 GnuPG 呼叫:#!/bin/sh keyid=${1:-'0000000000000000'} gpg --with-colons --fingerprint --list-sigs | while read line; do packettype="$(echo "${line}" | cut -d':' -f1)" case $packettype in fpr) fingerprint="$(echo "${line}" | cut -d':' -f10)" ;; sig) issuedby="$(echo "${line}" | cut -d':' -f5)" if [ "x${issuedby}" = "x${keyid}" ]; then echo "${fingerprint}" fi ;; esac done | uniq
這依賴於作為第一個參數傳遞的長密鑰 ID,無論如何都不應該使用短密鑰 ID。