agenticpoa/sshsign

GitHub: agenticpoa/sshsign

基于 SSH 的 AI 代理签名服务,解决身份绑定、作用域授权与不可变审计问题。

Stars: 1 | Forks: 0

![sshsign logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/107bb89e29021354.png) # sshsign 基于 SSH 的 AI 代理签名服务。无账户、无密码、无 OAuth。SSH 密钥即身份,作用域授权即边界,不可变收据即证明。 ``` ssh sshsign.dev ``` ## 功能 - 代理和开发者通过 SSH 接入,身份从公钥自动识别 - 创建带有作用域授权和元数据约束的 Ed25519 签名密钥 - 签名 Git 提交、法律协议(SAFEs、NDA)或任意负载 - 共签流程:代理执行操作,人工批准(可选手写签名) - 带轮转约束和不可变链式关联的协商日志 - 每次签名、拒绝或撤销均记录到不可变审计追踪(immudb) ## 快速开始 ### 体验 TUI ``` ssh sshsign.dev ``` ### 设置 Git 提交签名(约 5 分钟) 1. 安装 CLI: ``` # Homebrew brew install agenticpoa/tap/sshsign # 或 Go 安装 go install github.com/agenticpoa/sshsign/cmd/sshsign@latest ``` 2. 固定主机密钥: ``` echo "sshsign.dev ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEHD3y2HaBA+KveRWiMN5vigPzDs7s0meo0b/DZcAHne" >> ~/.ssh/known_hosts ``` 指纹:`SHA256:07UTOOLZj6oOs+bAZQJ98/40368zyR73DeOevE+8uMw` 3. SSH 登录并创建签名密钥: ``` ssh sshsign.dev # 跟随 TUI 创建密钥并设置授权 # 记下密钥 ID(例如 ak_7xm3...) ``` 4. 配置 Git: ``` git config --global gpg.format ssh git config --global gpg.ssh.program "sshsign" git config --global user.signingkey "ak_7xm3..." ``` 5. 签名提交: ``` git commit -S -m "signed commit" ``` ## 编程接口 所有命令均基于 SSH: ``` # 创建带约束的签名密钥 ssh sshsign.dev create-key \ --scope safe-agreement \ --tier cosign \ --require-signature \ --constraints '{"valuation_cap": {"min": 5000000, "max": 15000000}, "discount_rate": {"min": 0.15}}' # 对有效载荷签名(cosign 返回待定 ID + 批准 URL) echo '{"valuation_cap": 8000000}' | ssh sshsign.dev sign \ --type safe-agreement \ --key-id ak_xxx \ --metadata '{"valuation_cap": 8000000, "discount_rate": 0.20}' # 在网页批准后检索证据信封 ssh sshsign.dev get-envelope --id pnd_xxx # 记录带有强制执行的协商报价 ssh sshsign.dev log-offer \ --negotiation-id neg_xxx \ --round 0 --from founder --type offer \ --metadata '{"valuation_cap": 12000000}' # 查看协商历史 ssh sshsign.dev history --negotiation-id neg_xxx # 列出密钥、撤销、批准、拒绝 ssh sshsign.dev keys ssh sshsign.dev revoke --key-id ak_xxx ssh sshsign.dev approve --id pnd_xxx ssh sshsign.dev deny --id pnd_xxx ``` ## 授权模型 每个签名密钥都带有作用域授权和类型化约束: | 约束类型 | 示例 | |----------|------| | `range` | 估值上限介于 $5M 与 $15M 之间 | | `minimum` | 贴现率至少 15% | | `maximum` | 罚金不超过 $500K | | `enum` | NDA 类型:双向或单向 | | `required_bool` | 要求按比例分配权利 | **确认层级:** - **自主** - 代理立即签名 - **共签** - 需人工批准后签名 - **共签 + 手写签名** - 人工在网页上批准并绘制手写签名,封入防篡改证据信封 ## 网页批准流程 当授权启用 `require_signature` 时,签名响应会包含一个批准链接: ``` https://sshsign.dev/approve/pnd_xxx?token=... ``` 审批人打开该链接,在浏览器中审阅协议条款,绘制手写签名并点击“Sign & Approve”。签名图像与文档哈希、签名者身份、IP 和时间戳一起密封在证据信封中。该图像仅存在于密封信封内。 ## 运行服务端 ``` export SSHSIGN_KEK_SECRET="$(openssl rand -hex 32)" # 可选 export SSHSIGN_LISTEN_ADDR=":2222" export SSHSIGN_DB_PATH="./sshsign.db" export SSHSIGN_HOST_KEY_PATH="./host_key" export SSHSIGN_HTTP_ADDR=":8443" export SSHSIGN_HTTP_DOMAIN="sshsign.dev" # 可选:用于防篡改审计跟踪的 immudb export SSHSIGN_IMMUDB_ADDRESS="127.0.0.1" go run ./cmd/sshsign-server/ ``` ## 架构 ``` Agent/Developer --SSH--> wish server --HTTP--> web approval | (signature +--------+--------+ capture) | | Bubble Tea TUI Programmatic CLI | | +--------+--------+ | Authorization Engine (scopes, typed constraints, hard/soft rules, cosign) | +---------+---------+ | | | Signing Evidence Negotiation Engine Envelopes Offers (Ed25519) (sealed) (turn-enforced) | | | +---------+---------+ | +---------+---------+ | | SQLite immudb (users, keys, (immutable tokens, offers) audit trail) ``` ## 技术栈 | 组件 | 技术 | |------|------| | 语言 | Go | | SSH 服务器 | charmbracelet/wish | | 终端 UI | charmbracelet/bubbletea | | 网页批准 | net/http, HTML5 Canvas | | 签名 | crypto/ed25519, SSHSIG 格式 | | 授权 | 带有类型化约束和规则的作用域令牌 | | 证据 | 带有 SHA-256 绑定的密封 JSON 信封 | | 审计追踪 | codenotary/immudb | | 存储 | SQLite(modernc.org/sqlite,无 CGO) | ## 相关项目 - [APOA](https://github.com/agenticpoa/apoa) - Agentic Power of Attorney 规范 - [negotiate](https://github.com/agenticpoa/negotiate) - AI 代理协商协议与 SAFE 演示 ## 故障排除 **"Permission denied (publickey)"** - 确保已配置 SSH 密钥(`ssh-add -l`)并至少连接一次以注册。 **"Host key verification failed"** - 固定主机密钥(参考快速开始步骤 2),或使用 `ssh -o StrictHostKeyChecking=accept-new sshsign.dev` 连接。 **"unknown key id"** - 运行 `ssh sshsign.dev keys` 列出密钥并检查 ID。 **"not your turn"** - 协商报价必须在双方之间交替。 **"this approval requires a handwritten signature"** - 授权已启用 `require_signature`。在浏览器中打开批准链接以绘制签名。 ## 许可证 MIT
标签:AI代理身份认证, Ed25519密钥, EVTX分析, Git提交签名, Go语言实现, Immudb审计存储, Scoped授权, SSH签名服务, 不可变审计日志, 免OAuth, 双人复核, 安全合规, 手写签名, 无账号认证, 日志审计, 法律协议签署, 终端用户界面, 网络代理, 谈判日志, 身份即密钥, 链式日志, 防抵赖