Skip to content

Releases: alfredhuang211/dsh-ssh-hosts

dsh-ssh-hosts 0.5.0 — 配置界面第二轮优化

Choose a tag to compare

@alfredhuang211 alfredhuang211 released this 12 Oct 12:22

这一版做了什么

配置界面(设置 → 插件 → dsh-ssh-hosts / 设置侧栏「SSH 主机」)

  • 删除二次确认:在主机块内确认,并说明会连带清掉什么(例如「已存密码也一并清除」)
  • 就地校验:与服务端同一套规则(名称字符集与重名、地址、端口 1-65535、用户、私钥路径、远端绝对路径、备注长度、跳板机写法、密码登录必须有密码、profile 无凭据服务时提前说明)。错了当场红框 + 说明文案,保存失败也留在表单里
  • 测试连接:结果就地显示在那台主机下面 —— 成功给耗时与远端首行,失败给 exit code 与原因首行,不用去翻底部日志
  • 过滤框:主机多了按名称 / 地址 / 标签 / 备注 / 认证方式过滤,显示匹配台数
  • 空状态:没有主机时直接给「新增主机」+ 手工编辑提示
  • 键盘与无障碍:Enter 保存、Esc 取消;错误 role="alert"、日志 aria-live、忙碌 role="status"
  • 密码区:状态徽章「已保存(来自哪一层)/ 未设置」+ 显示/隐藏 + 清除需再确认一次
  • 人话忙碌文案:「正在保存…」「正在测试 web-01 的连接…」

设置里的 SSH 主机卡片

修复: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 — 会话窗口「+」菜单选主机 / 密码登录

Choose a tag to compare

@alfredhuang211 alfredhuang211 released this 12 Oct 11:54

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