如何删除我使用 apt-key add - 添加的 gpg 密钥?

Ray*_*ond 183 apt repository gnupg

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

 curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Nit*_*esh 234

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

sudo apt-key list
Run Code Online (Sandbox Code Playgroud)

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

pub   1024R/B455BEF0 2010-07-29
uid                  Launchpad clicompanion-nightlies
Run Code Online (Sandbox Code Playgroud)

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

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
Run Code Online (Sandbox Code Playgroud)

  • 在 ubuntu 16.10 上的结果似乎有点不同:`pub rsa4096 2012-05-11 [SC] 8439 .... uid ....` (15认同)
  • 看起来这个需要更新到 18.04 (5认同)
  • 啊,我看到唯一的 Id 在标记为 pub 的行上,而不是在标记为 uid 的行上。 (4认同)
  • 在 16.10 上,使用 list 命令时不再显示短键 ID,但它实际上是长十六进制的最后 8 个字符。来自@wesam 的回答。 (4认同)

小智 227

在 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>
Run Code Online (Sandbox Code Playgroud)

密钥 ID 将是 EFE21092

  • 很有帮助,谢谢。这是非常无益的用户体验。 (25认同)
  • @SColvin 你可以做`sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"`,我认为使用整个指纹更安全,keyid 可能有重复(至少当你使用 PGP 时电子邮件,我读到你应该分享你的整个指纹,而不仅仅是 keyid)。 (24认同)
  • 必须是最愚蠢的“--help”列表之一(完全不清楚 id 是什么) (4认同)
  • 对于 18.04.1。 (2认同)
  • 谢谢你。糟糕的设计决定。 (2认同)

lew*_*s4u 12

Ubuntu 20.04 更新

跑完后

sudo apt-key list
Run Code Online (Sandbox Code Playgroud)

你应该得到 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]
Run Code Online (Sandbox Code Playgroud)

uid你下面有应用程序的名称,例如:

[ unknown] Opera Software Archive Automatic Signing Key 2019 <packager@opera.com>
Run Code Online (Sandbox Code Playgroud)

你要删除的键在它上面:

    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>
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-key del "D4CC 8597 4C31 396B 18B3  6837 D615 560B A5C7 FF72"
Run Code Online (Sandbox Code Playgroud)

  • 是的...我认为如果您采用该键的任何部分,它甚至会起作用,因为它会搜索整个键内没有空格的模式 (2认同)

der*_*ugo 5

我制作了一个简短的脚本来使事情变得更容易,并使用字符串而不是 id。

如果密钥包含您知道的唯一字符串,您可以使用我的脚本。
例如,在我的 webmin 案例中

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <jcameron@webmin.com>
sub   1024g/1B24BE83 2002-02-28
Run Code Online (Sandbox Code Playgroud)

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

我把它保存为 ~/removeAptKey

并运行它

sudo ./removeAptKey jcameron
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的

KEYID: 11F63C51
OK
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <jcameron@webmin.com>
sub   1024g/1B24BE83 2002-02-28
Run Code Online (Sandbox Code Playgroud)

首先,我得到密钥块的上面两行:

  • sudo apt-key list: 像往常一样列出 apt 键
  • grep '${UNIQUE}' -B 1:只需要包含唯一密钥字符串行jcameron-B 1前行
  • > result.temp: 将它保存在一个文件中(后来被删除)

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

  • grep 'pub': 现在只取带有pup密钥 id的行
  • cut -d " " -f 4: 取该行的第 4 个单词(第一个是pub两个空格,而不是我们后面的字符串``)
  • cut -d "/" -f 2: 只取后面的部分 /

最后删除这个键并清理

  • apt-key del ${KEYID}(在我的情况下11F63C51
  • rm result.temp: 不再需要这个文件了

  • 我在没有参数的情况下运行了这个,它只是清除了我所有的密钥。;( (2认同)
  • 如果其他人的密钥被擦除,我可以按照以下说明修复它:https://askubuntu.com/a/145933/13693 (2认同)