gnupg 키링을 청소 하시겠습니까?


46

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

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


1
gpgtools.org 사용 합니다 . 그러나 만료 된 코드를 제거하는 데 도움이되지는 않지만 gpg 키 관리가 쉬워집니다.
Nick Roz

답변:


37

Charles Lockhart의 GPG 치트 시트에서 :

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

            ︙

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

$ 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

이것을 처리하기 위해 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

무엇 $2awk스크립트의 섹션? 그리고 그 동안 무엇 $1입니까? 건배.
Cbhihe

현재 입력 행의 두 번째 및 첫 번째 (공백으로 구분) 필드에 대한 일반적인 awk 구문입니다.
fche December

키의 로컬 정리를 수행 한 다음 키 서버에서 방금 삭제 한 모든 항목을로 다운로드하는 이유를 모르겠습니다 --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

5
gpg clean만료 된 키를 제거하지 않고 만료 된 서명 만
fche

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.