Làm sạch keyring gnupg của tôi?


46

Keyn gnupg của tôi chứa hàng trăm mục không cần thiết. Làm thế nào tôi có thể loại bỏ các khóa đã hết hạn, bị thu hồi và không dấu khỏi nó?

Tôi muốn giữ các khóa đã ký khóa của mình và chỉ nhập các khóa mới theo yêu cầu. Trước đây tôi đã nhập toàn bộ web tin cậy cho những người ký chính của tôi. Có vẻ như một trong những người ký chính của tôi đã nhặt được một số lượng rất lớn chữ ký trong các chuyến đi của anh ấy, và những thứ này hiện đang làm tắc nghẽn khóa của tôi.


1
Tôi sẽ sử dụng gpgtools.org . Tuy nhiên, điều này không giúp loại bỏ hết hạn, nhưng chắc chắn giúp giảm bớt việc quản lý các khóa gpg
Nick Roz

Câu trả lời:


37

Từ tờ Cheat GPG của Charles Lockhart :

Tôi đã từng User Namelà tên được liên kết với khóa. Xin lỗi đó không phải là rất giàu trí tưởng tượng. Tôi nghĩ rằng gpg khá rộng trong các bài tập người dùng của nó, ví dụ: tên cho khóa riêng của tôi là Charles Charles Lockhart, nhưng tôi có thể tham khảo điều đó bằng cách chỉ cần đặt vào trong Lock Lockartart. Điều đó không có ý nghĩa gì, xin lỗi.

            ︙

để xóa khóa chung (khỏi vòng khóa chung của bạn):

$ gpg --delete-key "User Name"

Điều này loại bỏ khóa công khai khỏi vòng khóa công khai của bạn.
LƯU Ý: Nếu có một khóa riêng trên vòng khóa riêng của bạn được liên kết với khóa chung này, bạn sẽ gặp lỗi! Trước tiên, bạn phải xóa khóa riêng của mình cho cặp khóa này khỏi vòng khóa riêng của bạn.

để xóa khóa riêng (một khóa trên vòng khóa riêng của bạn):

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

Thao tác này sẽ xóa khóa bí mật khỏi vòng khóa bí mật của bạn.


2
Cảm ơn; đó là một sự khởi đầu, ít nhất Tôi có thể sử dụng nó để tìm và liệt kê các khóa đã hết hạn:gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
truy cập

"User Name"cũng có thể là khóa công khai ngắn
nmz787

8

Tôi có một tập lệnh bash được lên lịch để chạy hàng tuần từ cron để xử lý việc này:

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

Có gì $2trong awkphần kịch bản của bạn? Và trong khi ở đó, nó là $1gì? Chúc mừng.
Cbhihe

Cú pháp awk bình thường cho trường thứ hai và thứ nhất (được phân tách bằng dấu cách) trong dòng đầu vào hiện tại.
fche

Tôi không hiểu tại sao thực hiện dọn dẹp các phím cục bộ và sau đó tải xuống tất cả những thứ bạn vừa xóa khỏi máy chủ khóa --refresh-keys. Tôi sẽ đặt phần làm mới vào giữa kịch bản chứ không phải phần cuối.
lapo

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

1
Khi tôi làm theo các bước đó và sau đó kiểm tra với `gpg --list-key`, tôi tiếp tục giữ các khóa cũ đã hết hạn ...
Cbhihe

5
gpg cleankhông xóa các khóa đã hết hạn, chỉ các chữ ký đã hết hạn
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.

đây là một bash-script đang thực hiện công việc Đây là phần thích ứng của https://superuser.com/a/859739 cho gpg2 trong đó id khóa nằm ở dòng thứ hai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.