SSH 密钥同步安全边界
关联 Issue: #2182, #2328
安全保证
Open ACE 不会将 root 私钥传播给工作区用户。
当安全 SSH 同步不可用或失败时,系统会:
- 跳过所有文件同步(不会回退到旧的同步逻辑)
- 写入结构化安全日志到
/var/log/openace/ssh-sync-failure.json - 创建部署告警文件
/var/log/openace/ssh-sync-failure.warning - 返回非零退出状态码表示失败
任何情况下,系统都不会回退到复制 root 私钥的实现。这是 fail-closed(失败时关闭)安全原则的核心。
概述
Open ACE 实现了安全的 SSH 密钥同步机制,防止将平台控制面的私钥传播给工作区用户。
安全边界
┌─────────────────────────────────────────────────────────────┐
│ Platform Layer (root) │
│ /root/.ssh │
│ ├── id_rsa (禁止同步) │
│ ├── id_ed25519 (禁止同步) │
│ ├── *.pem, *.key (禁止同步) │
│ ├── known_hosts (允许同步) │
└── allowed_keys/*.pub (显式配置后允许同步) │
├─────────────────────────────────────────────────────────────┤
│ User/Tenant Layer (per-user) │
│ /home/<user>/.ssh │
│ ├── known_hosts (从平台同步) │
│ ├── id_rsa (用户自行配置,不来自 root 同步) │
└── deploy_key_<project> (per-project 或显式挂载) │
└─────────────────────────────────────────────────────────────┘
核心原则
1. 默认拒绝
- 默认情况下,不同步任何文件到用户
~/.ssh - 只有显式白名单中的文件才允许同步
- 黑名单中的文件绝对不可同步,即使配置也无效
2. 白名单机制
默认允许同步的安全文件:
known_hosts- 已知主机列表known_hosts.old- known_hosts 备份known_hosts.old.*- known_hosts 历史备份
扩展白名单(需要安全评审):
- 公司公钥文件 (
*.pub) - 经过安全评审的 SSH 配置片段
3. 黑名单
绝对禁止同步的文件:
私钥文件:
id_rsa,id_dsa,id_ecdsa,id_ed25519id_*(所有私钥模式)*_rsa,*_dsa,*_ecdsa,*_ed25519
证书/密钥文件:
*.pem,*.key,*.p12,*.pfx
Socket 文件:
*.socket,agent.*,control_*
Token 文件:
token_*,*.token
SSH 配置文件:
config,config_*
文件类型:
- 符号链接(symlink)
- 硬链接
- Unix socket
- 设备文件
- 命名管道(FIFO)