该功能自 v0.5.0 起提供,v0.8.1 补充了隔离 Science 的 SSH 前置校验桥接。它让隔离 Science 在用户明确授权后,按系统 OpenSSH 语义复用真实 ~/.ssh/config;它不是 SSH server、端口转发 UI 或公网暴露功能。
reuse_system_ssh 默认关闭。关闭时,CSSwitch 不把真实系统 SSH 配置注入隔离 Science。
启用时,CSSwitch 会在隔离 HOME 的 .ssh/config 创建一个 0600 V2 普通入口文件。它不复制真实配置,精确结构是:
# CSSwitch managed system SSH config bridge v2
Host <从真实 config 安全枚举的具体 aliases...>
Include "<真实 ~/.ssh/config 的绝对路径>"
Host 行让 Science 在真正执行 SSH 前取得候选 alias;Include 让 OpenSSH 继续按真实配置求值。该 stub 不是“只有一条 Include”,也不是对真实 config 的语义副本。
启用后,CSSwitch 在隔离环境 PATH 前放置一个窄 wrapper,最终执行:
/usr/bin/ssh -F <real-home>/.ssh/config <原始参数...>
参数仍由调用方交给系统 ssh;wrapper 只固定配置文件入口,不实现 SSH 协议,也不读取或显示私钥内容。
这是一项行为授权,不只是“读一个 config 文件”。系统 OpenSSH 会按原生规则处理:
IncludeIdentityFileIdentityAgentProxyCommandMatch exec
这些规则可能进一步访问其他文件、ssh-agent 或本机命令。用户启用前应理解现有 SSH 配置的信任边界。
- 不复制或 symlink 整个
.ssh,也不复制真实 config 内容; - 隔离 config 不是指向真实文件的 symlink,避免 Science 写穿真实配置;
- 不把 private key、config 内容或 ssh-agent 数据传到 CSSwitch UI;
- 不启动
sshd,不开启 macOS Remote Login; - 不修改防火墙或建立
0.0.0.0listener; - 不把 SSH 访问与 CSSwitch inference Gateway 混成同一服务;
- 不保证某个 host、key、agent、ProxyCommand 或网络一定可用。
默认关闭时,SSH 不是普通 Science 启动的前置条件。用户启用该设置时,CSSwitch 先验证真实 ~/.ssh/config;SSH 授权状态变化会先停止仍使用旧授权的隔离 Science,再保存新设置。关闭授权会撤销 CSSwitch 管理的隔离 config;若该位置是外来文件、symlink 或特殊文件,CSSwitch 会拒绝覆盖或删除并据实报错。
启用后的每次启动都会再次校验 config 与 packaged wrapper。config 缺失、wrapper 缺失或路径不安全时,启动 fail closed 并清理部分启动,不能以 warning 略过。
当前 packaged wrapper validator 检查:asset root/scripts/wrapper 目录链不是 symlink 且为目录;wrapper 本身不是 symlink、是普通文件、不超过 128 KiB,并至少有一个 executable bit。它当前不检查 wrapper 的精确内容/hash、owner、link count、group/world writable 或精确 mode,文档和验收不能把这些未实现检查写成已证明。只有 Science 已成功启动后的某次 SSH 命令失败,才只影响该命令。
错误报告不得打印私钥路径、config 内容、ssh-agent 数据或其他敏感信息,也不得为了诊断读取真实 private key。
| Gate | 要证明什么 | 当前边界 |
|---|---|---|
| 1. Science parser acceptance | 当前 Science 接受 alias inventory、ssh_hosts 与 V2 stub |
source 建立生成/事务链;当前 0.1.25 动态结果未运行 |
| 2. OpenSSH invocation | Science 实际选择 wrapper;wrapper 调用 /usr/bin/ssh -F <real config> 并保留参数/env |
wrapper source 已建立;需隔离 recorder,不连真实 server |
| 3. real server connectivity | key/agent/known_hosts、DNS/network、server 与远端命令成功 | 只在另行授权后验证;不能由 Gate 1/2 推出 |
静态/source 还应分别证明:默认关闭、保存时缺失 config 拒绝、stub/sidecar 事务、无 .ssh 复制、无 sshd/防火墙/公网 listener。/usr/bin/ssh -G 不能替代 Science parser,wrapper source 也不能替代 Science 实际 invocation。
任一道 gate 的成功都不能泛化为所有用户 config、key、agent、网络或 server 可用。