Answers:
首先,您需要找到添加的密钥的密钥ID。通过以下命令执行此操作:
sudo apt-key list
它将列出您拥有的所有键,每个条目如下所示:
pub 1024R/B455BEF0 2010-07-29
uid Launchpad clicompanion-nightlies
确定要删除的密钥后,请使用命令sudo apt-key del <keyid>
where <keyid>
被替换为要从密钥环中删除的密钥的实际密钥ID。
$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY
,下一步该怎么办?
在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
sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"
,我认为使用整个指纹比较安全,密钥ID可以重复(至少当您将PGP用于电子邮件时,我读到您应该共享整个指纹,而不仅仅是密钥ID)。
我编写了一个简短的脚本,使事情变得简单,并使用字符串而不是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=$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."
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
:将其保存在文件中(以后将其删除)如果返回正好2行(->恰好有1个键),我继续:
grep 'pub'
:现在仅采用pup
键为id 的行cut -d " " -f 4
:以该行的第4个字为例(第一个是pub
两个空格,比``之后的字符串)cut -d "/" -f 2
:仅在之后参与 /
最后删除这个键并清理
apt-key del ${KEYID}
(以我为例11F63C51
)rm result.temp
:不再需要此文件#
该if子句中的罪魁祸首吗?
$#
。它返回给定参数的数量。
我知道我可能会迟到,但只想分享这一行命令即可实现这一目标。
注意:仅当输出是唯一键时,这才起作用。
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 $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名称在哪里。
16.04
您提供的命令时出现错误。awk: line 1: syntax error at or near {
但是角括号匹配,所以我不确定为什么这不起作用
apt-key list
格式已经更改。现在,它似乎又开始工作了。(编辑:请记住以超级用户身份运行它)
Software & Updates-->Authentication
似乎无法正常工作(无法删除任何受信任的软件密钥)。相反,必须使用下面给出的clicmds。