Repository navigation
Releases: alfredhuang211/dsh-ssh-hosts
Releases · alfredhuang211/dsh-ssh-hosts
Release list
dsh-ssh-hosts 0.5.0 — 配置界面第二轮优化
这一版做了什么
配置界面(设置 → 插件 → dsh-ssh-hosts / 设置侧栏「SSH 主机」)
- 删除二次确认:在主机块内确认,并说明会连带清掉什么(例如「已存密码也一并清除」)
- 就地校验:与服务端同一套规则(名称字符集与重名、地址、端口 1-65535、用户、私钥路径、远端绝对路径、备注长度、跳板机写法、密码登录必须有密码、profile 无凭据服务时提前说明)。错了当场红框 + 说明文案,保存失败也留在表单里
- 测试连接:结果就地显示在那台主机下面 —— 成功给耗时与远端首行,失败给 exit code 与原因首行,不用去翻底部日志
- 过滤框:主机多了按名称 / 地址 / 标签 / 备注 / 认证方式过滤,显示匹配台数
- 空状态:没有主机时直接给「新增主机」+ 手工编辑提示
- 键盘与无障碍:
Enter保存、Esc取消;错误role="alert"、日志aria-live、忙碌role="status" - 密码区:状态徽章「已保存(来自哪一层)/ 未设置」+ 显示/隐藏 + 清除需再确认一次
- 人话忙碌文案:「正在保存…」「正在测试 web-01 的连接…」
修复:dev 构建下第二次渲染会抛 TypeError
react-dom 的 dev 构建在 setInitialDOMProperties 里会 Object.freeze 它收到的每个 style 对象;而产物把共享样式常量 muted 当 style 传出去后又用 Object.assign(muted, …) 原地修改,于是第二次渲染必抛 Cannot assign to read only property 'marginBottom'。生产构建不冻结,所以桌面 App 里看不出来 —— 这是 0.4.0 起就存在的潜在缺陷。改为 mutedWith() 一律返回新对象,并加两条回归测试(行为层用复刻 dev 冻结行为的 React 替身渲染两遍;源码层禁止 Object.assign(<共享常量>, …))。
验收
- 单测 211 个 / 198 通过 / 0 失败(13 个跳过的是需要真实服务器的集成测试)
- 从提交树
git archive HEAD干净导出 →npm ci→npm test复现同样结果 - 像素级验收:真实 React 18.3.1 + 无头 Chrome 渲染真实组件,340 / 360 / 680 三档宽度下
scrollWidth == clientWidth、0 个横向溢出元素、0 个被裁切的元素,8 项界面状态断言全 true
安装见 README;本页附件 dsh-ssh-hosts-0.5.0.tgz 可直接 dsh plugin install。
v0.4.0 — 会话窗口「+」菜单选主机 / 密码登录
0.4.0
新增
- 会话窗口「+」菜单里可以直接选主机:
+→ssh,弹出主机列表(user@host、标签、认证方式,并标出本会话正在用哪台),点一台即把本会话默认机切过去;也可手打/ssh <主机名>,/ssh clear清除。 - 新增主机时可选密钥或密码登录:密码存进 DSH 凭据库(
$DSH_HOME/.credentials.yaml,0600),清单里只留passwordRef,插件自己的文件永远不写密码;登录时用一次性 askpass 临时文件(0600/0700,用完即删),密码不进 argv、不进环境变量。 ssh_hosts现在报本次调用实际会用的那台(会话默认 → 全局默认 →config.defaultHost),并新增defaultSource告诉你来自哪一档。
修复
- 设置界面在窄侧栏里不再被挤出横向滚动(主机块纵向堆叠、字段自动换行)。
- 会话默认机(
ssh_use//ssh)与设置界面的「设为默认」(全局)共用一份状态但作用域分离,不再互相覆盖。
测试
- 202 个单测,无网络依赖:配置 / 清单 / 会话状态 / 传输层(含密码 askpass)/ 业务逻辑 / 工具契约 /
/ssh命令 / cordis 装载 / 界面链路 / 浏览器半边渲染。 - 13 个真实服务器集成用例(
DSH_SSH_HOSTS_REMOTE=1才跑,默认跳过),包含一次真实的密码登录(目标机上没有我们的密钥)。
安装
下载下面的 dsh-ssh-hosts-0.4.0.tgz,在桌面版「设置 → 插件」里安装;或:
dsh plugin --profile <profile> add ./dsh-ssh-hosts-0.4.0.tgz