# 安全策略 [English](SECURITY.en.md) | **简体中文** ## 报告漏洞 请**不要**开公开 issue。通过 GitHub 仓库的 **Security → Report a vulnerability** 私下提交, 并附上复现步骤与影响范围。确认后会尽快修复,并在 CHANGELOG 中致谢。 ## 这个插件保护什么 一句话:它保护**磁盘上的凭据**,不是一台已经被攻陷的机器。 | 有保护 | 无保护 | | --- | --- | | 地址、端口、账号、口令以 AES-256-GCM 密文落盘 | 已经以当前 Windows 用户身份运行的恶意进程 | | 数据密钥由 Windows DPAPI 绑定到当前用户,换机器/换用户都解不开 | 你在对话里明文说过的口令(它会进入会话日志) | | 口令经 askpass 环境变量交给 `ssh`,不进两端命令行、不进远端 `ps` | 远端主机自身的日志、审计与进程环境 | | `known_hosts` 主机名哈希化,地址不以明文落盘 | 目标主机被完全控制之后的一切 | | 私钥文件在录入时校验(拒绝 `.pub`、PPK、非密钥文件) | 私钥文件本身的权限——那由操作系统负责 | ## 已知取舍 - **`credentialRef` 指向的文件是明文。** `%DSH_HOME%\.credentials.yaml` 未经加密, 它换来的是「口令不进对话」,不是「口令加密落盘」。 想要两者兼得,请用离线录入通道 `scripts/set-secret.mjs`。 - **远端会留下产物。** `detach` 与后台任务在远端 `/tmp` 写日志文件(`.dsh-ssh-*.log`); 其中可能包含命令输出。请自行评估目标机的可访问性,并在任务结束后清理。 - **`known_hosts` 使用 `accept-new`。** 首次连接自动信任并记录主机密钥,此后变更会被拒绝; 这防的是后续中间人,不是首次连接时的中间人。需要严格模式请自行改用 `sshConfigFile`。 - **超时中断不等于远端停止。** 本地客户端被中断时远端命令可能仍在运行; 工具会明确说明这一点,条件允许时请优先使用 `detach`。 ## 依赖面 零运行时依赖,只调用系统 OpenSSH 客户端(`ssh` / `scp`)。