agenticpoa/sshsign
GitHub: agenticpoa/sshsign
基于 SSH 的 AI 代理签名服务,解决身份绑定、作用域授权与不可变审计问题。
Stars: 1 | Forks: 0

# 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, 双人复核, 安全合规, 手写签名, 无账号认证, 日志审计, 法律协议签署, 终端用户界面, 网络代理, 谈判日志, 身份即密钥, 链式日志, 防抵赖