从CRAN Ubuntu存储库安装R:无公钥错误


76

我使用的是R版本2.13,并且想更新到较新的版本,以便使用某些依赖于R> = 2.14的软件包。

我行我的sources.list文件FOUND描述这里。然后,我导航到终端并输入:

sudo apt-get update

并尝试在距离我最近的CRAN镜像上更新R时收到以下错误:

正在阅读包装清单...完成

W:GPG错误:http ://lib.stat.cmu.edu oneiric /发行:由于公共密钥不可用,因此无法验证以下签名:NO_PUBKEY 51716619E084DAB9

任何想法如何调试此错误?


13
在您链接的页面的最下方搜索-查找“ SECURE APT”,然后按照那里的说明进行操作
Ben Bolker

此外,该行以W开头,这仅表示警告
Dirk Eddelbuettel 2012年

在@ ben-bolker之后-我自己遇到了这个问题,即使我遵循SECURE APT说明,也无法解决。我发现我在工作的防火墙后面关闭了端口11371,无法下载安全密钥。这种情况可以在这里进行测试。我执行此升级的唯一方法是在家中进行访问,在那里我可以访问路由器。
daedalus

Answers:


46

就像@Ben Bolker评论一样(很抱歉,我劫持了您的评论,但尚未发布正确答案),在debian软件包repo的描述中有一段secure apt内容:

安全的APT

CRAN上的Debian反向移植档案文件用“ Johannes Ranke(CRAN Debian档案文件)”密钥进行了签名,密钥ID为381BA480。你可以用

gpg --keyserver subkeys.pgp.net --recv-key 381BA480或使用其他密钥服务器,

gpg --keyserver pgp.mit.edu --recv-key 381BA480如果这不起作用,则可能是由于防火墙阻止了端口11371。或者,您可以在http://keyserver.noreply.org上搜索0x381BA480。 /http://pgp.mit.edu/并将密钥块复制到纯文本文件中,例如jranke_cran.asc。

如果使用gpg接收密钥确实有效,则需要将其导出到文本文件

gpg -a --export 381BA480> jranke_cran.asc在这两种情况下,您都需要通过运行使apt系统知道密钥

apt-key将jranke_cran.asc添加为root。

如果您尚未执行此操作,则可能会解决您的问题。


3
我根本不介意您劫持评论。当我懒得发表完整答案时,我会发表评论……
Ben Bolker

7
请注意,此答案和@ManuelRamon的答案都依赖于旧密钥。替换为从收到的错误消息中得到的所有内容apt-get update
Ari B. Friedman

2
只是想确认SECURE APT部分中的'剪切和粘贴'选项是否起作用:在keyserver.ubuntu.com:11371中搜索密钥(搜索Michael Rutter)并将密钥复制到纯文本文件中,说出key.txt。然后,使用sudo apt-key add key.txt将密钥提供给apt-key-
理查德(Richard)

1
问题-该信息已过时,因为当前的公共密钥是Michael Rutter,如下面的答案所述。编辑此答案以反映新信息是否合适?StackExchange的标准是什么?
边缘案例

82

对我有用的最简单的解决方案是来自Emre Sahin的以下线程

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 

标记答案中的键似乎对我不起作用。但是,这确实做到了
OganM 2014年

4
+1这对我有用,但请注意,我需要将密钥从E084DAB9(属于先前的维护者Michael Rutter)更改为381BA480(现任维护者Johannes Ranke)
arielf 2015年

5
2017
乍得

谢谢乍得。截至2018
-Alex

1
截至今天,3.6.1的关键是Johannes Ranke FCAE2A0E115C3D8A
stucash



5

我遇到了同样的问题,可能是由于防火墙的缘故,我发现的唯一解决方案是使用有用的Y PPA Manager。下面概述的两个步骤已在Ubuntu 15.04上运行。

1)首先安装Y PPA Manager:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install y-ppa-manager

2)然后通过运行Y PPA Manager来获取丢失的密钥:

y-ppa-manager

点击“高级”

接下来,点击“尝试导入丢失的GPG密钥”

最后,再次更新以检查其是否有效:

sudo apt-get update

5

这是一个循序渐进的答案,可能会更容易理解。

  1. 获取密钥(警告消息中的最后8位数字):

    gpg --keyserver pgp.mit.edu --recv-key E084DAB9
    

    输出应如下所示:

    gpg: requesting key E084DAB9 from hkp server pgp.mit.edu
    gpg: key E084DAB9: public key "Michael Rutter <marutter@gmail.com>" imported
    gpg: Total number processed: 1
    gpg:               imported: 1  (RSA: 1)
    
  2. 添加密钥(需要超级用户访问权限):

    gpg -a --export E084DAB9 | sudo apt-key add -
    
  3. 更新存储库:

    sudo apt-get update
    

现在应该没有关于丢失密钥的警告。


mit密钥服务器有时会失败。用keyserver.ubuntu.com工程代替它。
akashrajkn

4

就像上面发布的其他内容一样,这种单行代码似乎在Debian 6上运行良好:

sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 381BA480

Executing: gpg --ignore-time-conflict --no-options
--no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys 381BA480 
gpg: requesting key 381BA480 from hkp server pgp.mit.edu 
gpg: key 381BA480: public key "Johannes Ranke (CRAN Debian archive) <jranke@uni-bremen.de>" imported 
gpg: no ultimately trusted keys found 
gpg: Total number processed: 1 
gpg:      imported: 1

1
我还要补充一点,有时默认端口是被阻止的,因此您必须指定通过未阻止的端口(例如80)获取密钥。请参阅:cloud.r-project.org/bin/linux/ubuntu
mpettis

1

这解决了我的问题

$ wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add


0

它必须为密钥使用更长的标识符。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

问题似乎是服务器上的密钥ID重复。请参阅CRAN的说明以及Michael Rutter撰写的有关此帖子的更多背景信息。

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.