apt-get更新上的“没有可用的公共密钥”


133

执行时apt-get update,出现以下错误:

root@ADS3-Debian6:/home/aluno# apt-get update
Atingido http://sft.if.usp.br squeeze Release.gpg
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-en
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-pt
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-pt_BR

(...)

Obter:10 http://security.debian.org squeeze/updates/non-free i386 Packages [14 B]
Baixados 612 kB em 4s (125 kB/s)                    
Lendo listas de pacotes... Pronto
There is no public key available for the following key IDs: 8B48AD6246925553

2
...而您遗忘的字符串很重要。这将会让我们识别你丢失的钥匙(假设安装钥匙圈包-优选信任的媒体是鲁达建议没有帮助)
derobert

1
您不应该这样让猫在键盘上行走。:-)⁠
G-人

Answers:


173

其他答案是否起作用,取决于它们所指示的包装中是否包含键“ 8B48AD6246925553”。

如果需要密钥,则必须获取该密钥,并在哪里找到它,它在密钥服务器中(很可能任何密钥服务器都可以):

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553

在这里,这工作对我来说太,而不是其他的答案..
萨伊·柯伦

现在是@starbeamrainbowlabs!=)
那位巴西人

@ThatBrazilianGuy:D
starbeamrainbowlabs

4
有什么方法可以确定接收到的密钥是否合法,这样我就可以进行危险的操作,例如向任意密钥添加全局apt-trust?收到密钥后,是否有任何方法可以检查密钥的可信度?进行密钥验证需要执行哪些步骤?例如,您仅有的是ftp-master.debian.org/keys/ziyi_key_2002.asc,那么如何在不中断信任链的情况下获取最新密钥?
蒂诺

1
@ThatBrazilianGuy:这是您的问题,但这并不意味着您有权破坏答案。
G-Man

76

我建议您遵循@mariotomo的回答,而不要遵循以下步骤:


根据下列密钥ID没有可用的公共密钥,它将对此进行修复:

sudo aptitude install debian-archive-keyring

参考文献


最后8个十六进制数字与此共享,因此它可能抱怨微风。OP的不幸之处在于:pub 4096R / 46925553 2012-04-27 [过期:2020-04-25] uid Debian存档自动签名密钥(7.0 / wheezy)<ftpmaster@debian.org>
Martin Dorey

5
是否debian-keyring真的需要?刚好对我起作用debian-archive-keyring
x-yuri 2015年

毫不奇怪,不同的十六进制数可能需要不同的解决方案。我把引号的数量在我的谷歌搜索,以迫使该号码逐字搜索,我降落在这个页面,固定我的问题:reddit.com/r/linux4noobs/comments/4grdo7/...(@ mariotomo的答案可能也起作用了-我没有尝试过)
Michael Scheper

debian-keyring没有必要的。
x-yuri

38

我建议:

$ sudo apt-get install debian-archive-keyring
$ sudo apt-key update

这比其他方法要好,因为它没有安装debian-keyring,这很大,而且有99%的时间是不必要的。


1
这就是我所需要的-对我来说很棒!
哈珀维尔,2015年

像魅力一样工作!
Wilbeibi

1
对于我来说,这是更好的解决方案,因为它更适合Docker容器。但是请注意(至少在Docker中),您只需要先安装此软件包,然后安装apt-get update然后再安装真正想要的软件包。
Malvineous

Debian 10:警告:“ apt-key update”已被弃用,不应再使用!注意:在您的发行版中,此命令是空操作,因此可以安全地删除
aexl

事实上,你可能需要安装Debian的归档钥匙圈,即使你已经在其最新版本的安装Debian的钥匙圈
安赫尔

17

错误“ 没有适用于以下密钥ID的公共密钥”表明存在严重的安全问题:无法检查操作系统程序包与其公共密钥的完整性,因为缺少其公共密钥。

如果消息是:

There is no public key available for the following key IDs: 1397BC53640DB551

您可以使用以下命令找出哪个存储库使用密钥:

for n in `ls /var/lib/apt/lists/*gpg`; do echo "$n" ; gpg --list-packets "$n" | grep 1397BC53640DB551; done

在此示例中,这是Google的Chrome存储库:

/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release.gpg

如果您信任Google,其政府等,则应找出密钥在哪里,并添加以下内容:

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -

固定给我:)谢谢!但是只是好奇,出什么事了?第一个命令做什么,第二个命令做什么?这应该解决所有问题吗?我的问题也与Google Chrome有关。
罗汉

并且第一个命令是否会对gpg进行任何更改?它说它创建了一些conf文件gpg.conf,但我不知道是否要这样。
罗汉

第一个确实在您的数据包列表中搜索密钥以查看有问题的数据包。第二个下载密钥并将其添加到您的系统中。在这种情况下,第一个命令没有用,但作为一般方法很好。
Marco Sulla

3

我在Linux Mint(内核版本3.13.0-24)中遇到了相同的问题,并且能够使用以下命令解决它:

gpg --recv-keys <the-reported-key>

gpg --export <the-reported-key> | apt-key add -

注意事项:

1)命令按顺序执行2)命令以root用户身份执行

礼貌这个答案。


1

作为备选:

$ sudo apt-get install debian-keyring debian-archive-keyring
$ sudo apt-key update

6
请不要在答案中宣传您的博客。那就是你的简历。
slm

1

我的答案是在以下bash脚本中对@mariotomo(我赞成)进行了轻微升级(IMHO,YMMV)

  • 也使用 gpg
  • 参数化更多
  • (也使用其他密钥服务器,尽管在这种情况下,我怀疑它没有什么区别)

您也可以注释掉eval“空运行”的行:该脚本将仅向您显示其打算做什么,而没有实际执行。只需确保NO_PUBKEY每次使用时都更改此值(也可以KEYSERVER根据需要更改):

NO_PUBKEY='1397BC53640DB551' # CHANGE TO THE VALUE CITED IN YOUR ERROR MESSAGE!
KEYSERVER='keys.gnupg.net'

NO_PUBKEY_LEN="${#NO_PUBKEY}"
echo "NO_PUBKEY_LEN='${NO_PUBKEY_LEN}'"     # for sanity or debugging
# note following works because bash arrays have 0-based indices
NO_PUBKEY_2ND_HALF_START=$(( NO_PUBKEY_LEN/2 ))
echo "NO_PUBKEY_2ND_HALF_START='${NO_PUBKEY_2ND_HALF_START}'" # ditto
NO_PUBKEY_2ND_HALF="${NO_PUBKEY:${NO_PUBKEY_2ND_HALF_START}}"
echo "NO_PUBKEY_2ND_HALF='${NO_PUBKEY_2ND_HALF}'"             # ditto

for CMD in \
  'date' \
  "gpg --keyserver ${KEYSERVER} --recv-keys ${NO_PUBKEY_2ND_HALF}" \
  'date' \
  "gpg -a --export ${NO_PUBKEY_2ND_HALF} | sudo apt-key add -" \
; do
  echo -e "${CMD}"
  eval "${CMD}"
done

0

运行killall -q gpg-agent如果其他解决方案不起作用。它可能会起作用。

我在Ubuntu 18.04上的PPA存储库遇到了类似的错误,在上个月尝试了Internet上的各种解决方案后,我偶然发现了gpg-agent并杀死了它。然后,PPA存储库开始更新sudo apt-get update。我知道它可能会损害安全性,但有时您需要PPA的软件包,而GPG却不允许您这样做。稍后,您再次启动gpg-agent,一切恢复正常。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.