跳转到内容

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 才有。

另请参阅

Released under the MIT License.