问题

笔者使用MacOS向Maven中心仓库提交jar包时,需要gpg签署。
因文件需要远程校验,需将公钥传之密钥服务器,命令如下:

1
gpg --keyserver keys.gnupg.net --sent-keys BEXXXXXXXX....

该命令返回:

1
2
gpg: keyserver send failed: No route to host
gpg: keyserver send failed: No route to host

笔者踩了此坑,查了google,github的解决方法都不行,
因此在此分享自己的思考和解决方案。

解决方案1

报错信息是No route to host,而且笔者在相同网络的另一台windows电脑是没问题的,因此考虑是域名解析的问题。
既然是域名解析问题,那就是DNS问题。因此笔者确认了Macbook网络的DNS,果然是空的。
添加DNS 8.8.8.8后即可正常上传。

附国内可用的keyserver列表

1
2
3
4
keyserver.ubuntu.com
pgp.mit.edu
subkeys.pgp.net
www.gpg-keyserver.de

解决方案2

既然命令行上传不了,那就打开密钥服务器的网页,在网页端提交:
比如浏览器打开https://keyserver.ubuntu.com

那问题来了,我们的公钥是什么呢? 公钥可由以下命令导出,即可查看。将其复制粘贴到网页,提交即可。
1
2
gpg -a -o public.key --export BEXXXXXXXX....
cat public.key

总结

可能gpg的域名解析直接依赖于设置里的DNS服务器,但是MacOS的DNS设置默认是空的,所以导致域名解析失败。
设置里添加DNS服务器即可解决此问题。