dsh-server-connector 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/README.md +574 -456
- package/lib/audit.js +14 -3
- package/lib/client.js +1716 -1376
- package/lib/policy.js +167 -6
- package/lib/registry.js +182 -7
- package/lib/routes.js +1527 -1272
- package/lib/tools.js +42 -10
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# 更新日志
|
|
2
|
+
|
|
3
|
+
## 0.2.1 — 2026-11-06
|
|
4
|
+
|
|
5
|
+
### 修复(严重:导致 DSH 无法启动)
|
|
6
|
+
|
|
7
|
+
- **密码凭证引用格式非法,会让整个 DSH 启动失败**。此前密码认证生成
|
|
8
|
+
`server-connector:<id>:password`,其中含冒号与连字符,而
|
|
9
|
+
`@deepseek-ai/dsh-credentials` 要求所有凭证引用匹配 `/^[A-Za-z_][A-Za-z0-9_]*$/`。
|
|
10
|
+
这条非法引用一旦写入 `servers.json`,下次启动时 `credentials` 插件解析失败;
|
|
11
|
+
由于它是必需插件,整个 Host 起不来——**而且禁用本插件也没用,因为坏值已经在磁盘上**。
|
|
12
|
+
|
|
13
|
+
三处修复,缺一不可:
|
|
14
|
+
- 改为生成 `DSH_SERVER_CONNECTOR_<ID>_PASSWORD`,并校验调用方传入的引用,
|
|
15
|
+
使本插件再也无法写入非法值;
|
|
16
|
+
- 加载时迁移**旧格式**,让已经落盘的记录继续可用,而不是把「Host 崩溃」换成
|
|
17
|
+
「插件加载失败」;
|
|
18
|
+
- 迁移后**回写文件**,否则之后复制的文件副本仍带着非法值。已经合法的文件不会被重写。
|
|
19
|
+
|
|
20
|
+
只迁移本插件曾经写出的那一种格式;其他非法引用仍然拒绝,因为静默改写可能让记录
|
|
21
|
+
指向另一个密钥。
|
|
22
|
+
|
|
23
|
+
- 同时修正 README 与设计文档中展示的引用格式(它们此前在教读者写出非法值)。
|
|
24
|
+
|
|
25
|
+
### 升级说明
|
|
26
|
+
|
|
27
|
+
升级到 0.2.1 后**无需手动改文件**:插件加载时会自动把旧引用迁移成合法值并回写。
|
|
28
|
+
|
|
29
|
+
若 DSH 当前因该问题无法启动,先做下面任一操作再启动:
|
|
30
|
+
|
|
31
|
+
- 编辑 `~/.dsh/server-connector/servers.json`,把
|
|
32
|
+
`"server-connector:srv-01:password"` 改成 `"DSH_SERVER_CONNECTOR_SRV_01_PASSWORD"`
|
|
33
|
+
(`srv-02` 同理);或
|
|
34
|
+
- 直接删除该文件中 `auth.kind` 为 `password` 的服务器记录。
|
|
35
|
+
|
|
36
|
+
然后安装 0.2.1。
|
|
37
|
+
|
|
38
|
+
> 迁移只改引用名,**不搬运密钥值**。升级后原密码可能需要重新输入一次
|
|
39
|
+
> (取决于该密钥此前是否成功写入 `~/.dsh/.credentials.yaml`)。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 0.2.0 — 2026-11-05
|
|
44
|
+
|
|
45
|
+
### 新增
|
|
46
|
+
|
|
47
|
+
- **每台服务器独立的启用/禁用开关**。禁用后 `srv_list` 与系统提示都不再列出该服务器,
|
|
48
|
+
任何 `srv_*` 调用返回 `SERVER_DISABLED`;面板里该行置灰并标注「已禁用」,随时可恢复。
|
|
49
|
+
已连接的服务器必须先断开才能禁用。切换不走待确认区,写审计 `server-enabled` / `server-disabled`。
|
|
50
|
+
- **每台服务器独立的自定义高危规则**。在详情页给单台机器补规则(正则 + `confirm`/`block`),
|
|
51
|
+
与内置 20 条走同一套判定。保存时六道校验:长度、可编译、不匹配空串、拒绝嵌套量词(ReDoS)、
|
|
52
|
+
必须命中至少一条样例、id 不冲突。配套 **试跑** 接口,逐条报告样例是否命中且不写盘。
|
|
53
|
+
- `POST /server-connector/servers/:id/rules/preview` 等四条自定义规则路由。
|
|
54
|
+
|
|
55
|
+
### 修复
|
|
56
|
+
|
|
57
|
+
- **长任务读取报「belongs to another session」**。`srv_job_output` / `srv_job_kill` 把调用者
|
|
58
|
+
算成 `undefined` 而非本次调用的会话,导致本会话发起的后台任务对自己也不可见。
|
|
59
|
+
测试替身此前忽略归属参数,因此没有暴露该问题;现已补上同等的归属校验与回归测试。
|
|
60
|
+
- **Windows 上私钥认证无法提交**。表单与路由都要求私钥路径以 `/` 开头,
|
|
61
|
+
使 `C:\…` 与 UNC 路径一律被拒;现已接受盘符与 UNC 路径(`defaultWorkDir` 仍要求 POSIX,
|
|
62
|
+
因为它是远端路径)。
|
|
63
|
+
|
|
64
|
+
### 文档
|
|
65
|
+
|
|
66
|
+
- 设计规格从 `2026-11-04-server-connector-plugin-design.md` 改名为 `docs/design.md`,
|
|
67
|
+
并补入自定义规则(§4.4)与启用开关相关章节。
|
|
68
|
+
- README 重写安装章节,覆盖 npm、GitHub Release tarball、GitHub 源码、本地 checkout 四条渠道。
|
|
69
|
+
|
|
70
|
+
### 兼容性
|
|
71
|
+
|
|
72
|
+
- `servers.json` 向前兼容:缺少 `enabled` 字段的旧记录按**启用**加载,缺少 `customRules`
|
|
73
|
+
的按空列表加载。
|
|
74
|
+
- 无破坏性变更。
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 0.1.0 — 2026-11-05
|
|
79
|
+
|
|
80
|
+
首个公开发布版本。
|
|
81
|
+
|
|
82
|
+
- 六个 `srv_*` 工具:`srv_list` / `srv_connect` / `srv_exec` / `srv_job_output` /
|
|
83
|
+
`srv_job_kill` / `srv_policy_check`。
|
|
84
|
+
- 内置 20 条高危命令规则(8 条 block、12 条 confirm),逐台可调。
|
|
85
|
+
- SSH 连接池、主机指纹校验、审计日志(JSONL)、两段式危险操作确认。
|
|
86
|
+
- 侧边栏「服务器」面板、服务器表单、设置页。
|