前言¶
在 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:在远端起脱离会话的进程(POSIXnohup,WindowsStart-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