我不再需要服务器的密钥环中的密钥。是否可以删除它?我使用以下命令添加了密钥:

 curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -


感谢您的帮助

#1 楼

首先,您需要找到添加的密钥的密钥ID。通过以下命令执行此操作:

sudo apt-key list


它将列出您拥有的所有键,每个条目如下所示:

pub   1024R/B455BEF0 2010-07-29
uid                  Launchpad clicompanion-nightlies


确定了要删除的密钥后,请使用命令sudo apt-key del <keyid>,其中<keyid>已替换为要从密钥环中删除的密钥的实际密钥ID。

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$


评论


@Raymond没问题:)

– Nitin Venkatesh
2012年2月24日20:15在

啊,我看到唯一的ID在标为pub的行上,而不是标为uid的行上。

–ctrl-alt-delor
16年6月21日在7:59

在ubuntu 16.10上的结果似乎有些不同:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....

–mxdsp
16年11月6日在16:17



看来需要更新18.04

–kennyB
19年2月16日在0:12

删除密钥后,我遇到了一个新问题。由于公共密钥不可用,无法验证以下签名:NO_PUBKEY,下一步我该怎么做?

– Corey
19年8月27日在3:10



#2 楼

在16.10上,当您使用list命令时,不再显示短键ID,但实际上它是长十六进制的后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) <cdimage@ubuntu.com>


密钥ID为EFE21092

评论


非常有帮助,谢谢。这对UX毫无帮助。

– SColvin
17年5月18日在11:27

@SColvin,您可以使用sudo apt-key del“ 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092”,并且我认为使用整个指纹更为安全,密钥ID可以重复(至少当您将PGP用于电子邮件,我读到您应该分享您的整个指纹,而不仅仅是键盘ID)。

–baptx
17年2月2日在12:14

非常有帮助,对于17.10也很真实!

– Hartmut P.
18年4月13日在21:15

并为18.04.1。

–罗斯·贝特曼
18-10-3在20:45

谢谢。糟糕的设计决策。

–布赖恩·史密斯(Brian Smith)
19 Mar 25 '19在19:54

#3 楼

我编写了一个简短的脚本,以简化操作,并使用字符串而不是id。

如果键包含一个已知的唯一字符串,则可以使用我的脚本。例如就我而言,对于webmin

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <jcameron@webmin.com>
sub   1024g/1B24BE83 2002-02-28


我确定系统上只有webmin密钥具有jcameron,而不是我使用此脚本删除相应的密钥。

我将其另存为~/removeAptKey

,并以

sudo ./removeAptKey jcameron


将输出保存为


/>
KEYID: 11F63C51
OK


这是我的脚本:


 #!/bin/bash

function printKeys(){
    echo "Installed keys are"
    echo ""
    sudo apt-key list
}

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

if [[ $# -eq 0 ]]
then
    echo "No key name provided"
    exit 1
fi

UNIQUE=

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."
    printKeys
    exit 2
fi

if [[ ${LENGTH} != 2 ]]
then
    echo "Key not found. Doing nothing."
    printKeys
    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之前的行:将其保存在文件中(稍后将其删除)

如果这恰好返回了两行(->正好有1个键)我继续:



grep 'pub':现在只取带有id为pup的行

cut -d " " -f 4:取那行的第四个字(第一个是pub,而不是第二个空格,而不是我们在``)之后的字符串。

cut -d "/" -f 2:只取/之后的部分

最后删除此键并清除



apt-key del ${KEYID}(在我的情况下为11F63C51

rm result.temp:不再需要此文件


评论


我在没有参数的情况下运行了它,它只是消灭了我所有的键。 ;(

–加百利博览会
18/12/21在23:11

如果有人碰了钥匙,我可以按照以下说明进行修复:askubuntu.com/a/145933/13693

–加百利博览会
18/12/22在2:29

??这怎么发生的?如果没有参数,它将以“没有提供键名”退出。

– derHugo
18/12/22在10:49

@derHugo不确定,但是if子句中的#可能是罪魁祸首吗?

–已清除
19年4月9日在15:51

@defuzed,如果您的意思是$#,则不。它返回给定参数的数量。

– derHugo
19年4月9日在17:51

#4 楼

在运行

sudo apt-key list

后更新Ubuntu 20.04


您应该获得apt键列表:

/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2016-04-12 [SC]
      EB4C 1BFD 4F04 2F6D DDCC  EC91 7721 F63B D38B 4796
uid           [ unknown] Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com>
sub   rsa4096 2019-07-22 [S] [expires: 2022-07-21]

pub   rsa4096 2017-04-11 [SC] [expired: 2019-09-28]
      D4CC 8597 4C31 396B 18B3  6837 D615 560B A5C7 FF72
uid           [ expired] Opera Software Archive Automatic Signing Key 2017 <packager@opera.com>

pub   rsa4096 2019-09-12 [SC] [expires: 2021-09-11]
      68E9 B2B0 3661 EE3C 44F7  0750 4B8E C3BA ABDC 4346
uid           [ unknown] Opera Software Archive Automatic Signing Key 2019 <packager@opera.com>
sub   rsa4096 2019-09-12 [E] [expires: 2021-09-11]

pub   rsa4096 2017-03-13 [SC]
      8CAE 012E BFAC 38B1 7A93  7CD8 C5E2 2450 0C12 89C0
uid           [ unknown] TeamViewer GmbH (TeamViewer Linux 2017) <support@teamviewer.com>
sub   rsa4096 2017-03-13 [E]


uid下,您具有应用程序的名称,例如:

[ unknown] Opera Software Archive Automatic Signing Key 2019 <packager@opera.com>


,要删除的密钥在其上方:

    D4CC 8597 4C31 396B 18B3  6837 D615 560B A5C7 FF72  <-- THAT'S THE KEY
uid           [ expired] Opera Software Archive Automatic Signing Key 2017 <packager@opera.com>


,然后通过将该键放在双引号或单引号中将其删除,如下所示:

sudo apt-key del "D4CC 8597 4C31 396B 18B3  6837 D615 560B A5C7 FF72"


评论


这对我来说也很有效,可以取密钥中的最后8个字符并删除两者之间的空格:sudo apt-key del A5C7FF72

– Purefan
20年6月22日在6:53

是的...我认为,即使您使用该键的任何部分,它也可能会起作用,因为它会搜索整个键内的模式而没有空格

–lewis4u
20年6月22日在6:58

#5 楼

我知道我可能会迟到,但只想共享此单行命令即可实现。

注意:仅当输出是唯一键时,此方法才有效。


Ubuntu版本最高为16.04(2018年12月22日更新):

apt-key del $(apt-key list | awk 'NR=='$(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":")'{print;exit}' | awk '{print }' | 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名称。

评论


我不确定为什么,但是在尝试运行您提供的16.04命令时出现错误。 awk:第1行:{或附近有语法错误{但是尖括号匹配,所以我不确定为什么这不起作用

–加百利博览会
18/12/21在22:45

@GabrielFair感谢您的注意,6月份它一直在工作(我从控制台复制粘贴了它),但现在似乎已更新,并且apt-key列表格式也已更改。现在,它似乎又开始工作了。 (编辑:记住以超级用户身份运行它)

– David Tabernero M.
18/12/22在0:47