为什么我从Ubuntu软件源获取软件包时出现身份验证错误?

我正在尝试使用VPN,所以我想安装pptpd。
john@desktop:~$ sudo apt-get install pptpd
[sudo] password for john: 
<snip>
The following extra packages will be installed:
  bcrelay
The following NEW packages will be installed:
  bcrelay pptpd
0 upgraded, 2 newly installed, 0 to remove and 11 not upgraded.
Need to get 90.5 kB of archives.
After this operation, 442 kB of additional disk space will be used.
Do you want to continue [Y/n]? y

一切都运行良好,直到我到达这里:

WARNING: The following packages cannot be authenticated!
  bcrelay pptpd
Install these packages without verification [y/N]? n
E: Some packages could not be authenticated

没有身份验证?我不是安全专家,但我相当确定这是件坏事。所以我检查一下软件包的来源
john@desktop:~$ apt-cache policy pptpd
pptpd:
  Installed: (none)
  Candidate: 1.3.4-3ubuntu1
  Version table:
     1.3.4-3ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ natty/main i386 Packages
john@desktop:~$ apt-cache policy bcrelay
bcrelay:
  Installed: (none)
  Candidate: 1.3.4-3ubuntu1
  Version table:
     1.3.4-3ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ natty/main i386 Packages

他们是从Ubuntu.com来的,但没有得到正确的身份验证?这里发生了什么事情?
6个回答

apt-key工具
apt-key用于管理apt用于验证软件包的密钥列表。使用这些密钥进行验证的软件包将被视为可信任的。它可以更新本地密钥环,添加Ubuntu存档密钥的密钥环,并从密钥环中删除不再有效的存档密钥。
$ sudo apt-key update
$ sudo apt-get update

尝试安装一些东西...

15它起作用了,但是 apt-key 说它没有改变任何东西。你知道我的问题是什么吗? - John
5这可能是由于软件包服务器端的许多错误导致的。有时运行apt-get update命令可以解决这个问题。 - ixtmixilix
有没有办法让apt在认证过程中更具体地指出问题所在?也许可以尝试使用详细模式标志(verbose flag)。我没想到要尝试那个,问题已经解决了,但我不知道为什么会出现这个问题,也不知道如何再现它。 - Wug
4在我的情况下,长时间进行aptitude工作时按下了Ctrl+C导致了问题。sudo apt-key update没有改变任何东西,但是sudo apt-get update解决了问题。 - musiphil
1显示的是"Ubuntu存档自动签名密钥 --@ubuntu.com未更改"...是否有其他建议! - CoDe
在更新“软件和更新”应用程序后,我遇到了这个问题。在执行了这两个命令后,问题得以解决。非常感谢 @hhlp! - Akronix
2我想知道为什么在遇到“以下软件包无法验证!”问题后,apt-key update不会自动运行... - reducing activity
在Debian 9.4上,这会抛出警告:'apt-key update'已被弃用,不应再使用!注意:在您的发行版中,此命令是无操作的,因此可以安全地删除 - ᴍᴇʜᴏᴠ

sudo apt-get update

足够为我修好它。

1在我这里也适用于Ubuntu 14.04,使用了一个全新安装的服务器(Ansible bug https://github.com/ansible/ansible-modules-core/issues/1497 在apt模块中导致apt-get update没有运行)。之前我运行了apt-key update来诊断问题,但它没有更新任何密钥,所以那不是解决方案。 - RichVel

我在Ubuntu 12.10(Quantal Quetzal)上遇到了这个问题。如果我尝试使用Synaptic软件包管理器图形界面,也会出现同样的问题。

结果发现我的系统仍然设置为使用一个我不再连接的代理服务器,因此无法再使用。一旦我禁用了代理服务器,apt就能够正确验证软件包。

要在Ubuntu 12.10(Quantal Quetzal)上禁用代理,请按照以下步骤进行:

  1. 按下键盘上的Super按钮(也称为Windows徽标按钮)
  2. 输入Network并按Enter
  3. 选择Network Proxy
  4. 将方法更改为None
  5. 点击Apply System Wide
  6. apt现在应该能够正确验证软件包了

小心企业代理!

我在代理后面遇到了警告:以下软件包无法验证!,其中包括openjdk-7-jdk等软件包。即使配置了`/etc/apt/apt.conf'和设置->网络设置中的代理配置,也无法对软件包进行验证或安装。

尝试(在代理后面): $ sudo apt-key update $ sudo apt-get update

密钥没有更新,apt-get update更新了一些内容,没有警告或错误。但是我仍然无法安装openjdk-7-jdk

解决方案:

  1. 直接连接到网络(避免企业代理)
  2. 在设置和/etc/apt/apt.conf中关闭代理配置
  3. sudo apt-key update
  4. sudo apt-get update
  5. sudo apt-get install openjdk-7-jdk

软件包已经通过验证,下载并安装完成。


4但为什么呢?为什么通过企业代理会妨碍软件包的正确认证? - Mikhail T.

我曾经遇到过这个问题,后来发现是澳大利亚服务器出了一些问题——可能是顶部草地上的袋鼠闯入了服务器。我通过将Muon中的软件源从澳大利亚服务器更改为主服务器来解决了这个问题。

ntc2基本上是正确的(至少对于我的情况),但请允许我详细说明解决方案。
由于某种原因,尽管设置为自动升级,我仍然停留在15.04版本。无论我更新多少次,都没有显示新的发布版本,并且在安装软件包时一直出现身份验证错误。
然而,最后我终于找到了如何通过官方的Ubuntu 15.10(Wily Werewolf)发行说明来强制升级的方法。 事实证明相当简单,在我的情况下,我只需要最后一步。 从Ubuntu 15.04升级:
  • 如果尚未安装,请安装update-manager-core软件包。
  • 确保/etc/update-manager/release-upgrades设置为normal。
  • 使用命令sudo do-release-upgrade启动升级工具。
现在我已经升级了,身份验证错误得到解决,我可以顺利安装软件包。
升级问题 - E: 方法提供了无效的103重定向消息
这可能与升级问题有关,所以我会将其留在这里,以防其他人也遇到此问题。 如果在升级过程中遇到以下错误:
E: 方法提供了无效的103重定向消息
您可能需要清除部分文件并重新尝试升级:
sudo rm /var/lib/apt/lists/partial/*
(来源:https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1479045
对我来说,这是使升级成功的最后一步。