指紋なしでgpg秘密鍵を強制的に削除する方法は?


11

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)

よく私は何をしているのかを知っており、重複したキーIDがある可能性があることを知っていますが、それらを強制的に削除する方法はないようですが、以下も機能しません。

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

何か案が?

回答:


6

gpg --list-secret-keys --with-colons --fingerprint簡単に解析できる形式で指紋のリストを生成するために使用します。削除するキーに対応するフォームの行を取得し、フィンガープリント()をに渡します。fpr:::::::::xxxx:xxxxgpg --batch --delete-secret-keys

次のコマンドは、すべての秘密鍵のフィンガープリントを生成します。削除するものだけを選択してください!

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

すごい!指紋は公開鍵でのみ利用できると思いました。
謝Jìléi

おっとっと!私は間違っています。指紋を取得できませんでした。コマンドyeilds:gpg:key XXXXXXXX:secret key without public key-skipd gpg:error reading key:secret key not availble実際、私はただ `はい| ... 'は機能せず、唯一の方法はgpgにパッチを当てることです。おかげで
謝Jìléi

3

私はこのトピックが古いことを知っており、答えはちょっとGillesのように見えますが、質問に完全に答えると思います(OPと同じ種類の問題があったため):

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

2

GillesとDolanorの回答をこの1行にまとめました。これは、特定のキーを削除する場合に便利です。

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

元の質問には答えませんが、他の人には役立つかもしれません。


1

保持する鍵をエクスポートし、ファイルを削除してから、リングを再作成します。


私はむしろgpgにパッチを当てて再コンパイルすることを好みます。
謝Jìléi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.