Cloud-init如何从远程文件获取apt密钥而非密钥服务器
问题
使用cloud-init配置InfluxDB官方APT软件源时,手动执行以下命令可正常完成源配置:
wget -qO- https://repos.influxdata.com/influxdb.key | gpg --dearmor > /etc/apt/trusted.gpg.d/influxdb.gpg echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/ubuntu bionic stable" > /etc/apt/sources.list.d/influxdb.list
尝试通过cloud-init原生apt模块实现自动化配置时,最初仅配置了源地址:
apt: sources: influxdb: source: 'deb https://repos.influxdata.com/ubuntu $RELEASE stable'
部署后触发GPG签名校验报错,提示仓库未签名。后续尝试了多种keyserver与keyid组合配置均失败:
keyserver: https://repos.influxdata.com/influxdb.keykeyserver: https://repos.influxdata.com搭配keyid: influxdb.keykeyserver: https://repos.influxdata.com搭配keyid: 05CE15085FC09D18E99EFB22684A14CF2582E0C5
需求是不使用runcmd模块,通过cloud-init原生能力正确拉取对应GPG密钥完成源配置。
正确配置方案
配置失败的核心原因是keyserver字段用途误用:keyserver仅用于指定HKP协议的公钥服务器地址,不支持直接传入公钥文件的直链URL。
要通过HTTPS地址直接拉取公钥,需要使用key字段,该字段支持直接传入公钥的下载URL,cloud-init会在配置apt源的阶段自动完成公钥拉取、gpg --dearmor格式转换、密钥存入系统可信目录的全流程,同时会自动在生成的源列表条目中补全对应的signed-by参数,完全不需要手动执行shell命令。
正确的配置如下:
apt: sources: influxdb: source: 'deb https://repos.influxdata.com/ubuntu $RELEASE stable' key: https://repos.influxdata.com/influxdb.key
失败配置的问题说明
- 把公钥文件直链填入
keyserver字段属于字段用法错误,该字段不会触发HTTP公钥下载逻辑 keyid字段仅用于指定公钥的40位完整指纹,需要搭配可查询到对应公钥的HKP服务器使用,InfluxData未将该公钥同步到Ubuntu默认的公钥服务器,因此即使填对了指纹也拉取不到对应密钥- 若使用的cloud-init版本低于22.1(当前主流发行版预装版本均已满足要求),
key字段暂不支持URL传值,可直接将InfluxDB公钥的ASCII文本内容内嵌到key字段中,同样可以完成配置。
内容的提问来源于stack exchange,提问作者Métoule
相关产品推荐
相关产品推荐

