Skip to content

命令行 ​

先选运行模式:

  • Linux 受保护部署:管理命令和 Agent 数据命令走不同的 socket,使用不同的系统账号。
  • 开发模式:同一个账号下的 serve / sign,只适合联调和临时身份。

完整参数以当前二进制的 --help 为准。

Linux 受保护部署 ​

先装服务,再建身份。安装入口在仓库根目录:

bash
./install.sh

它按平台调用 deploy/linux/install.py 或 macOS 的安装器,只装服务:构建、校验摘要、建账号、安装并启动 systemd 服务,不建身份、不收口令、不发 grant。装完用 anpio-cli did create --host HOST --handle NAME --key anpio-key 把新身份 provision 进服务——一条命令、一次口令确认,服务建钥匙、发布策略、发 grant,CLI 签首份文档并注册 handle(详见安装)。

已有身份(钥匙还在本地 store)用接管:macOS 是 sudo ./install.sh --adopt --identity FILE --cli-binary PATH --cli-sha256 HASH --target URL;Linux 的接管命令尚未提供。

--bootstrap 是原来的老路:按平台调 deploy/*/bootstrap.py,生成一次性身份、建热钥匙、离线迁入、登记 vault、确认角色、发布策略、创建 grant 并解锁。它还在,但只用于一次性预览身份;macOS 上固定 _anpagent 和 --hardware none。

下面的管理命令用于之后的日常操作。

安装入口本身按状态工作,重复执行是空操作:

命令做什么
./install.sh未安装则安装;已安装则打印状态并退出 0,不构建、不提权
./install.sh --status只读显示状态、是否运行、已装二进制摘要和账号
./install.sh --verify对已安装服务跑只读验收,失败退出 3
./install.sh --upgrade用当前构建替换二进制,保留配置和状态;摘要相同不重启
./install.sh --uninstall停服务并删除二进制和服务单元,保留配置、状态和账号

退出码:0 成功或本来就是这个状态,2 状态不符,3 验收失败,4 缺前置。任何动作加 --dry-run 都只打印计划。

命令谁用做什么
build-info任何人查看构建支持哪些能力;不代表这台机器已经配置安全
serve-protected --config FILE服务账号启动 daemon;由安装器生成的 systemd 服务调用
data --config FILE --file REQUEST.jsonAgent发一条数据请求,例如签名、查授权、查结果
data --config FILE --capability-file TOKEN --file REQUEST.json管理员账号同一条数据请求,改走能力入口;令牌把主体和 DID 收窄到它绑定的那一对
admin --config FILE status管理员查看服务状态
admin --config FILE catalog管理员查看钥匙、策略和主体
admin --config FILE list-principals管理员查看已登记的主体
admin --config FILE prepare --file CHANGE.json管理员准备一次精确变更,返回摘要和影响
admin --config FILE commit --operation-id UUID --digest HASH管理员提交刚才核对过的变更
admin --config FILE unlock --vault-id UUID --did DID --kid KID管理员读取口令并解锁指定热钥匙
admin --config FILE lock-all管理员移除驻留内存的钥匙
admin --config FILE complete-secret-operation --operation-id UUID --digest HASH管理员完成注册 proof 或热钥匙轮换;--new-secret 时读两遍新口令,ProvisionIdentity 走它
admin --config FILE capability mint --uid UID --did DID --label LABEL [--ttl-days N] [--out PATH]管理员签一张能力令牌,绑一个已启用主体和一个 DID;明文只出现一次
admin --config FILE capability revoke --capability-id ID管理员撤销令牌,幂等,下一条请求立即失败
admin --config FILE sign-first-document --vault-id UUID --did DID --document FILE [--domain HOST] [--challenge HEX]管理员签一份 DID 的首份文档;只在 ProvisionIdentity 之后紧接着有效,之后走 SIGN_DOCUMENT_PROOF
probe --security --config FILE任何人检查当前账号能访问哪个端点、配置是否有效、支持声明是什么

Agent 可用的数据操作:

操作用途默认
GET_CAPABILITIES查看协议版本、可用操作、用途、grant 类型开
LIST_AUTHORIZED_KEYS查看当前主体能用的钥匙开
GET_GRANT_STATUS查看 grant 的期限和剩余次数开
GET_DOCUMENT取某把钥匙的公开文档开
SIGN_HTTPRFC 9421 HTTP 请求签名开
GET_REQUEST_STATUS用原 request_id 查结果开
SIGN_ORIGIN_PROOFANP origin proof关
RENEW_GRANT续 session grant,只延期不加次数开
SIGN_PURPOSE设备/应用用途断言关(逐用途)
ECDHX25519 协商,返回共享密钥关
SIGN_OBJECT_PROOFW3C 对象 proof关
SIGN_DOCUMENT_PROOFDID 文档 proof(根键)关

关着的操作不会出现在 operations 里,发过去是 OPERATION_DISABLED。各操作的字段、编码和错误码见仓库 ADAPTER.md §11。

Agent 不能解锁、不能索取私钥、不能请求任意字节签名。唯一能用根键的数据面操作是 SIGN_DOCUMENT_PROOF,它的 grant 只能由管理面签发;换设备、改文档、注册这些根操作全部留在管理面。

命名钥匙 ​

key 这一组按名字管钥匙,不需要 DID。名字只是本机的地址;host、path、DID 和注册属于 anpio-cli。

命令做什么
key create [--name NAME] [--algorithm ed25519|x25519] [--label LABEL]铸一把命名钥匙;24 词只显示一次,口令读两遍后才写封装。不给名字时生成 k-xxxxxxxx
key list名字、指纹、是否解锁
key unlock --name NAME按名字解锁(口令从终端读)
key rotate --name NAME同名换一把新钥匙
key sign-document --name NAME --keyid KEYID --document FILE [--domain HOST] [--challenge HEX] [--out FILE]管理员动作:给一份 JSON 文档签 proof,不经过 grant
key bind-did --identity FILE --out DIR [--source-root DIR]接管前把命名钥匙重封成 DID 绑定封装;种子、公钥、指纹不变,源 store 只读

x25519 只能用于 ECDH,不能签名。命名钥匙进不了受保护 catalog;要把它们交给受保护服务,先用 key bind-did 重封,再按 macOS 的 --adopt 接管。

grant ​

grant create 在受保护管理面上发 grant,只支持两种用途:--purpose http-authentication(要 Hot 钥匙和 --target)与 --purpose document-proof(要 Root 钥匙)。--kid 直接点名已登记的钥匙,--key 用本地名字反查 DID 并与指纹核对,两者只给一个。--ttl 默认 24h,--uses 默认 100;提交前会把完整摘要打出来问一次。

capability ​

capability 是给"调用方不是 Agent 系统账号"时用的能力入口,默认关(features.agent_capability_signing)。令牌绑定 (principal_id, did),服务端只存哈希;mint 的明文只在回包里出现一次,revoke 幂等且立即生效。签发、开启方式和使用示例见能力令牌。

管理 JSON 的格式和完整流程见本机使用,接入代码见接到 Agent 上。

开发与离线维护 ​

命令组范围
serve / stop旧开发 daemon;不是 v2 的 systemd 服务管理
sign / list / status / document / unlock / lock旧 socket 客户端;同账号不承诺隔离
spec / keygen / publish / verify-doc本地生成和处理身份、公开文档
add-recovery-key / add-agreement-key / rotate-hot-key / remove-key / migrate / deactivate本地生命周期操作;托管目录拒绝这类直接写入
import-mnemonic / import-archive从助记词或归档恢复身份并重新封装
probe开发环境体检;与 probe --security 不同

控制终端不能证明“对面是人”,程序也可以创建 PTY。生命周期权限靠操作系统账号和受信管理边界,不要因为命令写着“给人用”就认为 Agent 调不到。

构建 feature ​

feature增加什么限制
mcpMCP 前端保护模式必须显式传 --config
seed-exportexport-seed默认没有;启用后不声明受保护支持
hardware-semacOS Secure Enclave 解封开发签名身份下持久化与主机生命周期已验收;正式分发未完成
hardware-tpmLinux TPM 解封部署范围已验收,实体芯片保护声明未做
hardware-software测试替身不是硬件;release 构建拒绝

数据面的新签名路不是构建 feature,而是运行配置里的独立开关,默认关。开关名、审计事件和逐用途清单见默认行为和仓库 ADAPTER.md §11.7。

Apache-2.0 许可