记录一次 apt-key curl导入失败的处理方式
在配置 Kubernetes APT 仓库的过程中,我们通常会执行如下命令来添加阿里云的 GPG 公钥:
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
但这次在某台新机器上执行时,出现了访问失败的问题。具体表现为 curl
命令无法成功连接,导致 apt-key
添加失败。该问题可能与网络、DNS、代理、防火墙等因素有关。
问题表现
执行命令时报错如下:
gpg: no valid OpenPGP data found.
aliyun 可能突然抽风了,这个地址怎么都访问不了,但我需要导入它的 apt-key.gpg
至于为何不用其他源,是因为要尽可能统一环境
解决思路:导出已有的 apt-key
并导入到新机器
幸运的是,我之前在另一台机器上成功添加过该公钥,于是想到是否可以导出密钥文件再导入到当前机器。这个方法验证有效,步骤如下:
1. 在已有公钥的老机器上导出 key
首先确认该 key 已经被正确添加:
apt-key list
你应该能看到形如如下的条目(一般含有 Aliyun
或 Kubernetes
的说明):
但这里阿里云的 key 是叫 cloud-...
,我是通过按时间来找到这个对应的 key 的。
pub rsa2048 2022-05-21 [SC]A362 B822 ... ...
uid [ unknown] Rapture Automatic Signing Key (cloud-rapture-signing-key-2022-03-07-08_01_01.pub)
sub rsa2048 2022-05-21 [E]
然后通过以下命令导出该 key:
apt-key export "A362 B822 ... ..." > aliyun-k8s.gpg
将其中的 A362 B822 ... ...
替换为实际的 Key ID(可以从 apt-key list
中找到)。
2. 将导出的 key 拷贝到目标机器
比如使用 scp
:
scp aliyun-k8s.gpg user@target-ip:/tmp/
3. 在目标机器导入该 key
登录目标机器,执行:
apt-key add /tmp/aliyun-k8s.gpg
看到如下提示表示导入成功:
OK
添加 aliyun 源,并 apt 更新:
echo 'deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main' > /etc/apt/sources.list.d/kubernetes.list
apt update
至此,APT 源就可以正常使用了。
总结
当无法联网或因为各种网络问题导致无法直接访问 GPG key 时,从已有机器导出 key 再导入,是一个非常实用的替代方案。这在企业内网、离线环境或者对外网访问有限制的情况下非常常见。