cnb-rs gpg-key add
cnb-rs gpg-key add [<KEY_FILE>] [-t <TITLE>]添加 GPG 公钥到当前用户账户。对齐 gh gpg-key add。
公钥需为 ASCII-armored 格式,即 gpg --armor --export <KEY_ID> 的输出(-----BEGIN PGP PUBLIC KEY BLOCK----- 开头)。
参数
[<KEY_FILE>]: 公钥文件路径。不传时从 stdin 读,方便走管道(对齐 gh)
选项
-t, --title <TITLE>: key 标题,用于在 CNB Web 设置页区分多个 key。不指定时 CNB 服务端按 key 信息自动生成
继承的全局选项:
--json: 以 JSON 格式输出添加结果--domain <DOMAIN>: 指定目标域名(默认:cnb.cool)
前置校验
cnb-rs CLI 端在送往 API 前做两层 friendly 校验:
| 校验 | 触发 | 错误信息 |
|---|---|---|
| 内容非空 | trim 后为空 | 公钥内容为空(请提供 GPG ASCII-armored 公钥) |
| ASCII-armored 头存在 | 缺 -----BEGIN PGP PUBLIC KEY BLOCK----- | 公钥格式无效:缺少 PGP PUBLIC KEY BLOCK 头 |
示例
bash
# 从文件添加
$ cnb-rs gpg-key add ~/.gnupg/my-key.asc --title "laptop key"
✓ 已添加 GPG key ABCD1234EF567890(laptop key)
id=65f4c2a8d3b1e9870a1234bc(删除时使用:cnb-rs gpg-key delete 65f4c2a8d3b1e9870a1234bc)
# 从 stdin(对齐 gh 管道风格)
$ gpg --armor --export ABCD1234 | cnb-rs gpg-key add --title "laptop key"
# 不指定 title,让服务端自动生成
$ cnb-rs gpg-key add ~/.gnupg/my-key.asc
# JSON 输出供脚本消费
$ cnb-rs gpg-key add ~/.gnupg/my-key.asc --json错误场景:
bash
# 空 stdin
$ echo "" | cnb-rs gpg-key add
错误: 公钥内容为空(请提供 GPG ASCII-armored 公钥)
# 非 ASCII-armored 格式
$ echo "not a gpg key" | cnb-rs gpg-key add
错误: 公钥格式无效:缺少 `-----BEGIN PGP PUBLIC KEY BLOCK-----` 头
# 文件不存在
$ cnb-rs gpg-key add /nonexistent.asc
错误: 读取 /nonexistent.asc 失败:No such file or directory (os error 2)CNB API 端点
POST /user/gpg-keys,请求体 web.AddGPGKeyForm:
json
{
"armoredPublicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n...",
"name": "laptop key"
}cnb-api 端实现位置
该端点由 crates/cnb-api/src/extensions/gpg_keys.rs 手动 mirror,因为生成器使用的 _live-swagger.json 不含 POST /user/gpg-keys,完整 swagger.json 才有。