dsh-ssh-workbench:把 SSH 终端、文件管理与 @服务器执行接入 DSH 对话

前言

在 DeepSeek Harness(DSH)里跑运维或排障时,常见做法是本机开终端、另开 SFTP,再在对话里让模型只动本地 bash 和 read/write——远程机器上的命令往往要人工切窗口执行,结果也难直接回到同一条会话。独立 SSH 客户端能解决连接问题,但不会把「在谁上执行」和 DSH 的审批、工具路由绑在一起。

dsh-ssh-workbench(仓库 duobaobox/dsh-ssh-workbench)是维护者 duobaobox 发布的客户端类插件:在 DSH 左侧提供独立的「远程工作台」,并把对话里的 @资源名 接到目标机上的 shell 执行,同时保留本地与远程文件管理。下文按安装、能力与用法说明,事实均来自项目 README 与 package.json。

这是什么

插件全称在 README 中写作 SSH Workbench(dsh-ssh-workbench)。定位是 DSH 的远程工作台:SSH 终端、本地与远程文件、以及在会话里通过 @服务器 触发远程命令;宿主与远程目标均支持 macOS / Linux / Windows(Windows 目标走 PowerShell)。

与「再装一个 SSH 客户端」的差异在于:远程执行接入 DSH 的对话与审批;终端、SFTP 文件管理和本地文件面板落在同一工作台;发布包自包含 SSH 传输依赖(vendor/ 内纯 JS 的 ssh2),安装时不跑 node-gyp、不依赖 Xcode Command Line Tools。插件不改写 DSH 本地工具语义;未使用 @ 时行为与原生一致。

适用 DSH 版本在 engines.dsh 中为 >=0.2.1-rc.1 <0.3.0(README 表述为 0.2.1-rc.1 ~ 0.2.x)。当前包版本为 1.6.4,许可证 MIT。

核心功能

远程资源与工作台 UI

  • 纳管:在右侧栏或「设置 → 远程工作台」增删改查资源,支持连接测试、host key 指纹确认、密码/私钥凭据(0600 存储);连接后可采集 hostname 等写入目标上下文。
  • 远程工作台页面:左侧为本地终端或远程 SSH 终端,右侧为本地用户主目录或远程 SFTP(远程默认登录 home);文件可在工作台内预览,分隔条可调宽度;每页签一会话,仅活动页签轮询。
  • 侧边栏开关:插件管理 → 远程工作台 →「在侧边栏显示远程工作台」可隐藏左侧入口;关闭后 @资源名 执行、设置页与模型工具仍可用。

对话里 @资源 执行

消息里写 @web-1(资源名支持中文等非 ASCII)后,后续命令在对应目标上执行。模型侧新增工具 ssh_workbench_target(切换目标),并按目标方言出现 remote_bash 或 remote_pwsh:

场景 行为
POSIX 宿主 + POSIX 目标 复用原生 bash,结果仍为原生终端卡片
Windows 宿主 + POSIX 目标 无原生 bash,改用插件 remote_bash
Windows 目标(两种宿主) 经 remote_pwsh 执行

uname -s / cmd /c ver 自动探测 facts.dialect,用于选执行路径与 UI 徽标(Linux / Windows),不依赖手填 platform。同时 @ 多个资源时需先 ssh_workbench_target 选择,否则远程工作台报 TARGET_NOT_SELECTED,不会静默走本地。

read / write / edit / glob / grep 始终只作用于本机;远程改文件需用远程 shell(如 cat、sed、Get-Content)或工作台 SFTP。远程命令执行前经危险命令黑名单兜底,其余是否弹审批由 DSH 会话预设(ask / never)决定。

其他已文档化的能力

  • run_in_background: true:在远端起脱离会话的进程(POSIX nohup,Windows Start-Process),返回 pid、日志路径与 tail/kill 提示;不注册 DSH 本地 job_*。
  • 连接池、预热、输出与超时上限等可通过 cordis.patch.yml 覆盖(见下节配置表)。
  • 明确不做:诊断包、HTTP 探测、批量执行、远程版 read/write/edit/glob/grep,以及命令分级(allow/guarded)、AI 风险解释和审计。

安装与启用

在 DSH 插件管理中搜索 dsh-ssh-workbench 安装,或执行:

dsh plugin --profile desktop add dsh-ssh-workbench

从源码构建时,README 给出:

npm test
npm run pack
# 然后在 DSH 的插件管理里安装 dist/dsh-ssh-workbench-1.6.4.tgz

安装完成后在 设置 → 远程工作台 添加资源。插件以当前 DSH 进程权限运行;安装前宜自行查看仓库源码与 LICENSE、vendor/NOTICE.md。

典型用法

1. 先点名目标,再描述操作

@web-1 看下磁盘和内存

模型会在 web-1 上调用 bash(或 Windows 宿主/目标下的 remote_bash / remote_pwsh)。远程改配置示例:

@web-1 把 /etc/nginx/nginx.conf 里 worker_connections 改成 2048,改完 nginx -t

2. 一条消息里多个资源

@web-1 @db-1 各自看下磁盘

模型应先 ssh_workbench_target({ server: "web-1" }) 再执行,再切到 db-1 重复。

3. 回到本机

由模型调用:

ssh_workbench_target({ server: "local" })

切换后,首条命令 stderr、cwd 前缀(如 web-1:/var/log)与 composer 下方会标出当前目标。

配置节选

在 profile 的 cordis.patch.yml 中可按需覆盖,例如:

- id: dsh-ssh-workbench
  name: 'dsh-ssh-workbench'
  config:
    commandTimeoutMs: 300000
    maxOutputBytes: 262144

常用键(默认值见 README 配置表):commandTimeoutMs(120000)、maxCommandTimeoutMs(1800000)、maxOutputBytes(102400)、connectTimeoutMs(15000)、hostKeyMode(strict / accept-new)、localRoot(空则本地文件面板以用户主目录为根)等。凭据与 servers.json 位于 ~/.dsh/ssh-workbench/,权限 0600;未知 host key 需用户确认指纹后方才信任。

适用场景与注意

适合:已在 DSH 0.2.x 上开发或运维,需要在同一会话里切换多台 POSIX/Windows 服务器执行命令,并希望在 UI 里兼顾 SSH 终端与 SFTP,而不另开多套客户端。

须知:

  • 远程命令在服务器自身权限边界内执行,不受 DSH 本地文件沙箱约束;黑名单仅为 best-effort 兜底。
  • 远程命令 stdin 启动后即 EOF;stdout/stderr 分管道收集,交错顺序可能丢失。
  • 工作台内本地/远程终端为用户手工输入,不经过 agent 审批与黑名单。
  • 社区目录页 SkillHub 上的 dsh-ssh-workbench 为独立生态站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-ssh-workbench 把远程 SSH 终端、SFTP 与 @资源 执行收进 DSH:本地工具语义不变,目标切换与方言探测由插件补齐,Windows 宿主与 Windows 目标均有对应路径。进一步了解实现与安全模型可见仓库 README 及 docs/architecture.md、SECURITY.md。

  • 目录页:https://www.skillhub.cn/plugins/duobaobox/dsh-ssh-workbench
  • GitHub:https://github.com/duobaobox/dsh-ssh-workbench
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye