如何删除使用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名称。