gnupg 키링을 청소 하시겠습니까? 항목이 포함되어 있습니다. 만료, 취소 및

내 gnupg 키 링에는 수백 개의 불필요한 항목이 포함되어 있습니다. 만료, 취소 및 서명되지 않은 키를 어떻게 제거합니까?

키에 서명 한 키를 유지하고 필요한 경우에만 새 키를 가져오고 싶습니다. 이전에는 키 서명자에게 전체 신뢰 웹을 가져 왔습니다. 저의 주요 서명자 중 한 명이 그의 여행에서 매우 많은 수의 서명을 집어 들었고, 이제 이것들은 제 열쇠 고리를 막고 있습니다.



답변

Charles Lockhart의 GPG 치트 시트에서 :

나는 User Name키와 관련된 이름으로 사용 했습니다. 상상력이 좋지 않아서 죄송합니다. 내가 생각 GPG는 예를 들어, 자사의 사용자 할당, 꽤 넓은, 내 개인 키의 이름은 “찰스 록 하트는”하지만 난 그냥 “록 하트”에 넣어 그것을 참조 할 수 있습니다. 말이되지 않습니다, 죄송합니다.

            ︙

공개 키 링에서 공개 키를 삭제하려면 :

$ gpg --delete-key "User Name"

공개 키 링에서 공개 키가 제거됩니다.
참고 :이 공개 키와 관련된 개인 키 링에 개인 키가 있으면 오류가 발생합니다! 먼저 개인 키 링에서이 키 쌍의 개인 키를 삭제해야합니다.

개인 키를 삭제하려면 (개인 키 링의 키) :

$ gpg --delete-secret-key "User Name"

비밀 키 링에서 비밀 키가 삭제됩니다.


답변

이것을 처리하기 위해 cron에서 매주 실행되도록 bash 스크립트가 있습니다.

#!/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


답변

% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]


답변

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 스크립트입니다. 그것의 적응이고 https://superuser.com/a/859739 키 ID 번째 라인이고 gpg2 대.


답변