在Ubuntu 18.04上安装sbt时出错:gpg:密钥服务器接收失败:参数无效

时间:2018-08-23 09:59:36

标签: scala build server sbt

我正在关注official sbt install instructions

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
Executing: /tmp/apt-key-gpghome.uRI0yiusG0/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
gpg: keyserver receive failed: Invalid argument

编辑:

我尝试挖掘执行的gpg.1.sh脚本。这是对gpg的最终调用。

$ sudo cat /tmp/apt-key-gpghome.IRnmlx6hfX/gpg.0.sh
#!/bin/sh
exec 'gpg' --ignore-time-conflict --no-options --no-default-keyring \
--homedir '/tmp/apt-key-gpghome.IRnmlx6hfX' --no-auto-check-trustdb --trust-model always "$@"

编辑2:

我尝试直接从密钥服务器中查询密钥,但是没有运气。参见http://keyserver.ubuntu.com/pks/lookup?search=2EE0EA64E40A89B84B2DF73499E82A75642AC823&op=vindex。密钥可能丢失了吗?

编辑3:

我在2月24日再次尝试,现在可以使用!

4 个答案:

答案 0 :(得分:4)

给出命令

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823

我得到了错误

Executing: /tmp/apt-key-gpghome.DKOlZn67Q0/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
gpg: ricezione dal server di chiavi non riuscita: Dati assenti

(无数据)

我以这种方式解决了(装有Ubuntu 18.04.1的笔记本电脑,在没有身份验证的公司代理后面):

  1. 使用gpg获取了密钥:gpg --receive-keys 99E82A75642AC823
  2. gpg向我展示了该密钥属于scalasbt@gmail.com
  3. 使用电子邮件地址在http://keyserver.ubuntu.com/上搜索了该键
  4. 将密钥保存在本地文件(sbt-key)中,然后用sudo apt-key add sbt-key导入

答案 1 :(得分:2)

有同样的问题。两个ubuntu 18.04.1盒子。一个是最近安装的,另一个是从16.04.5升级的。在第一个中,我可以导入密钥来毫无问题地安装Scala&R。在第二个步骤中,导入过程失败,并显示与您相同的错误。

似乎gpg导入了启动dirmng守护程序的密钥。此过程是通过网络与keyserver.ubuntu.com通信的过程。

为解决该问题,我在gpg之前通过以下方式启动了dirmng:

sudo -i
dirmngr --daemon --homedir /root/key --debug-level guru --log-file dirmng.log
gpg -vv --debug-level 9 --ignore-time-conflict --no-options --no-default-keyring --homedir '/root/key' --no-auto-check-trustdb --trust-model always --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823

然后gpg显示带有dirmngr的对话框:

gpg: DBG: chan_3 -> KEYSERVER --clear hkp://keyserver.ubuntu.com:80
gpg: DBG: chan_3 <- OK
gpg: DBG: chan_3 -> KS_GET -- 0x2EE0EA64E40A89B84B2DF73499E82A75642AC823
gpg: DBG: chan_3 <- ERR 167804976 Invalid argument <Dirmngr>
gpg: keyserver receive failed: Invalid argument
gpg: DBG: chan_3 -> BYE

并且dirmngr日志文件显示解决keyserver.ubuntu.com的错误:

2018-09-07 11:44:34 dirmngr[16174.6] DBG: chan_6 <- KS_GET -- 0x2EE0EA64E40A89B84B2DF73499E82A75642AC823
2018-09-07 11:44:39 dirmngr[16174.6] resolving 'keyserver.ubuntu.com' failed: Invalid argument
2018-09-07 11:44:39 dirmngr[16174.6] number of system provided CAs: 133
2018-09-07 11:44:44 dirmngr[16174.6] resolving 'keyserver.ubuntu.com' failed: Invalid argument
2018-09-07 11:44:44 dirmngr[16174.6] can't connect to 'keyserver.ubuntu.com': host not found
2018-09-07 11:44:44 dirmngr[16174.6] error connecting to 'http://keyserver.ubuntu.com:80': Invalid argument
2018-09-07 11:44:44 dirmngr[16174.6] command 'KS_GET' failed: Invalid argument

为什么一个连接到同一网络的盒子无法从dirmngr解析keyserver.ubuntu.com而新的盒子成功了?为什么在较旧的框中可以使用nslookup解析keyserver.ubuntu.com但dirmngr无法解决?我不知道。但是,两个框之间的区别在于/etc/resolv.conf。我已经添加了谷歌DNS服务器。从resolv.conf中删除它们使dirmngr起作用。

nameserver 127.0.0.53
#nameserver 8.8.8.8
#nameserver 8.8.4.4 

此更改后,apt-key起作用。希望这会有所帮助。

答案 2 :(得分:2)

这通常是由防火墙阻止端口11371引起的。您可以取消阻止防火墙中的端口。如果您没有访问防火墙的权限,则可以:

强制它使用端口80而不是11371

gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 94558F59

或者 从密钥服务器中找到并打开密钥。 将其内容复制到文本文件中。 转到系统工具>首选项>软件源>身份验证>添加密钥,然后选择创建的文本文件。对于Ubuntu 14.04和更高版本,请尝试:软件中心->编辑->软件源->身份验证->导入密钥文件

答案 3 :(得分:0)

在SBT官方文档中有this note

  

注意:已有关于使用Ubuntu的SSL错误的报告:服务器访问错误:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空url = https://repo1.maven.org/maven2/org/scala-sbt/sbt/1.1.0/sbt-1.1.0.pom,显然源自于使用/ etc / ssl / certs / java / cacerts cert-bug的PKCS12格式的OpenJDK 9。根据{{​​3}},该问题已在Ubuntu Cosmic(18.10)中修复,但Ubuntu Bionic LTS(18.04)仍在等待发布。请参阅答案以解决问题。

根据https://stackoverflow.com/a/50103533/3827,此问题已在 Ubuntu 18.04.1 中得到解决。