如何删除使用apt-key add添加的gpg密钥?
我不再需要服务器密钥环中的密钥了。 是否可以将其删除? 我使用此命令添加了密钥:
curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
谢谢你的帮助
首先,您需要找到您添加的密钥的密钥ID。 通过命令执行此操作:
sudo apt-key list
它将列出您拥有的所有密钥,每个条目如下所示:
pub 1024R/B455BEF0 2010-07-29 uid Launchpad clicompanion-nightlies
一旦找到要删除的密钥,请使用命令sudo apt-key del
,其中
将替换为要从密钥环中删除的密钥的实际keyid。
$ sudo apt-key del B455BEF0 $ apt-key list | grep clicompan $
在16.10,使用list命令时不再显示短键id,但它实际上是长hex的最后8个字符。
例如,以下密钥的密钥ID
/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg ------------------------------------------------------ pub rsa4096 2012-05-11 [SC] 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092 uid [ unknown] Ubuntu CD Image Automatic Signing Key (2012)
密钥ID为EFE21092
我做了一个简短的脚本,使事情变得更容易,并使用字符串而不是id。
如果密钥包含您知道的唯一字符串,则可以使用我的脚本。
例如在我的情况下为webmin
pub 1024D/11F63C51 2002-02-28 uid Jamie Cameron sub 1024g/1B24BE83 2002-02-28
我确定只有我的系统上的webmin密钥有jcameron
不是我使用这个脚本来删除相应的密钥。
我把它保存为~/removeAptKey
并运行它
sudo ./removeAptKey jcameron
输出应该是这样的
KEYID: 11F63C51 OK
这是我的脚本:
#!/bin/bash if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" 1>&2 exit 1 fi if [[ $# == 0 ]] then echo "No key name provided" exit 1 fi UNIQUE=$1 sudo apt-key list | grep "${UNIQUE}" -B 1 > result.temp LENGTH=$(cat result.temp | wc -l) if [[ ${LENGTH} -gt 2 ]] then echo "Attention you found more than 1 key. Use a more specific string." exit 2 fi if [[ ${LENGTH} != 2 ]] then echo "Key not found. Doing nothing." exit 3 fi KEYID=$(cat result.temp | grep 'pub' | cut -d " " -f 4 | cut -d "/" -f 2) echo "KEYID: "$KEYID apt-key del ${KEYID} rm result.temp
首先,我得到了我的密钥块的上面两行:
-
sudo apt-key list
:像往常一样列出apt键 -
grep '${UNIQUE}' -B 1
:只占用包含唯一键字符串jcameron
和-B 1
之前的行 -
> result.temp
:将其保存在文件中(稍后删除)
如果这正好返回2行( – >正好有1个键),我继续:
-
grep 'pub'
:现在只带有pup
key id的行 -
cut -d " " -f 4
:取该行的第四个字(第一个是pub
不是两个空格,比我们之后的字符串“) -
cut -d "/" -f 2
:只接受/
最后删除此密钥并清理
-
apt-key del ${KEYID}
(在我的案例中是11F63C51
) -
rm result.temp
:不再需要这个文件了
我知道我可能会迟到,但只是想分享这个单行命令来实现这一目标。
注意 :这仅在输出是唯一键时才有效。
Ubuntu版本高达16.04:
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | awk '{print $2}' | cut --fields 2 --delimiter "/")
其中FOOBAR
是UID名称。
16.10的Ubuntu版本:
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":") - 1`'{print;exit}')
其中FOOBAR
是UID名称。