前言¶
DeepSeek Harness(DSH)默认把 Web UI 绑在 127.0.0.1,CLI 也拒绝 --host 0.0.0.0,这是有意为之的安全设计。实际开发里,代码和构建环境往往在另一台机器上:云主机、内网服务器,或者一台 Windows 开发机。常见做法是 SSH 登录后手工同步文件,或在本地再开一套编辑器,智能体无法直接操作远端目录。
下面介绍 dsh-remote(flymysql/dsh-remote):由社区维护者 flymysql 发布的 DSH 联网工具插件。它让你从本机 DSH 主动连出去,选一台 SSH 主机和远端目录,通过 rw_* 工具在远端读写、执行命令,并把目录镜像到本地真实工作区,走 DSH 原有的 workspace 与 agent 文件流,无需改动 dsh-workspace 或 harness 核心。
这是什么¶
dsh-remote 是 DeepSeek Harness 的远程工作助手插件,分类为联网工具。一句话定位:管理多台 SSH 主机,选定远程(或本地)工作区,让智能体在远端目录上直接操作,同时用 SFTP 把远端目录镜像成本地 DSH 工作区。
- 维护者:flymysql
- 许可证:MIT
- 当前版本:0.8.8(npm 包名
dsh-remote) - GitHub:https://github.com/flymysql/dsh-remote(37 stars,8 forks)
- 社区目录:https://www.skillhub.cn/plugins/flymysql/dsh-remote
多机 SSH 与工作区选择¶
多机注册与连接¶
Settings 面板提供「远程工作区」入口,可保存任意数量的 SSH 主机(host / port / user,私钥或密码)。密码仅存本地,UI 不回显。每台机器可单独配置:
- passphrase、host-key 模式、SSH agent
- keyboard-interactive(OTP)
- 代理跳转(bastion)
- 可选 OS 钥匙串加密保存密码(macOS Keychain / Windows DPAPI / Linux
secret-tool)
支持从 ~/.ssh/config 导入 Host 别名(只引用路径,不读取密钥内容)。保存前可用「测试连接」校验,并按认证、网络、host key、超时等类别给出错误提示。
双标签工作区选择器¶
插件填充 DSH 原生的「添加工作区 / 选择工作区」流程,弹出居中模态框,两个标签页:
本机(Local) — 调用系统文件夹选择器(macOS osascript、Linux zenity→kdialog、Windows FolderBrowserDialog),或直接输入本地路径,作为普通 DSH 本地工作区。
远程(Remote) — 先选机器,路径框预填 / 并实时补全目录(选中一级立即列出下一级,类似 OS/VSCode 体验)。「浏览…」浮层展示 size 与 mtime,目录优先、跟随符号链接,填入路径但不立即提交,确认后点「设为远程工作区」。还提供最近工作区、~ 主目录快捷和「新建目录」。
确认远程工作区后,插件在本地创建真实镜像目录:
$DSH_HOME/remote-workspaces/<host>-<user>-<port>/<base>
经 fs.realpath 后由 harness 采纳为正式工作区,dsh-remote 通过 SFTP 保持同步。
核心能力¶
双向 SFTP 同步¶
rw_sync(远端 → 镜像)和 rw_push(镜像 → 远端)采用三方比对(远端、本地、上次同步快照)。两侧都改过的文件会报告冲突,不会静默覆盖;force=true 可强制覆盖。两者均支持 dry-run、后台任务,并遵守 gitignore 风格忽略规则(remote-workspaces 下的 .dsh-remote-ignore,默认忽略 .git、node_modules、target、dist、build 等)。
20 个 rw_* 模型工具¶
全部基于 SFTP,Windows 与 POSIX 远端均可使用:
| 工具 | 作用 |
|---|---|
rw_info |
查看当前连接与工作区信息 |
rw_connect |
建立 SSH 连接(可 save 保存配置) |
rw_pick_workspace |
选择远程工作区 |
rw_list_dir |
列目录(含 size、mtime) |
rw_stat |
文件元信息 |
rw_read_file |
读文件(支持 utf-8 / gbk 编码) |
rw_write_file |
写文件 |
rw_edit |
字面量替换编辑,带 mtime 乐观锁 |
rw_append |
追加内容 |
rw_mkdir |
建目录 |
rw_remove |
删除(递归,有界) |
rw_move |
移动/重命名 |
rw_exec |
远端执行命令(支持 pty / env) |
rw_search |
SFTP 树遍历搜索(含上下文行,遵守忽略规则) |
rw_download / rw_upload |
流式传输(fastGet/fastPut,有大小上限) |
rw_forward |
SSH 端口转发 |
rw_sync / rw_push |
同步与推送 |
rw_disconnect |
断开连接 |
rw_sync / rw_push 设 async: true 时返回 taskId,通过 /dsh-remote/task 查询进度、结果或取消(单飞队列)。
端口转发¶
Settings 页面或 rw_forward 可创建、启动、停止、删除本地转发(127.0.0.1:port → remote)与反向转发(remote → local)。定义持久化,重连时可自动重启,断开时全部停止。
侧栏远程编辑¶
自 v0.7.2 起,dsh-better-sidebar 为硬依赖并自动挂载。侧栏远程文件标签页支持点击「编辑」→ 修改 →「保存到远程」,带 mtime 乐观锁(并发修改返回 409,提示「重新读取」)。资源管理器行显示文件大小,右键菜单支持下载到本地镜像、重命名、删除、新建目录。
安全与审计¶
- Host-key 验证(TOFU):默认
hostKeyMode: accept-new,首次连接记录 host key,后续变更拒绝(防中间人)。verify拒绝从未见过的主机;off关闭验证。记录存于$DSH_HOME/remote-workspaces/known_hosts.json,可用/remote forget-key重置。 - 命令审计日志:每次
rw_exec、写、删、移动、转发操作追加到$DSH_HOME/remote-workspaces/audit.log(时间 · user@host · 操作 · 退出码 · 命令);Settings 展示最近 30 条。 - 当前活跃的
user@host:/path以及活跃转发会注入系统提示词。
跨平台与数据位置¶
所有文件访问在 SFTP 协议层完成,不依赖远端 shell,因此 Linux、macOS、Windows 远端在列目录、读写、搜索、同步上行为一致。机器配置与镜像目录均在 $DSH_HOME 下;0.6 之前的数据在 ~/.dsh/remote-workspaces,首次运行会自动迁移。
安装与启用¶
社区目录与 README 给出的安装命令一致:
dsh plugin add dsh-remote
一条命令安装完整 bundle。自 v0.7.2 起侧栏组件 dsh-better-sidebar 随包挂载,无需额外步骤;若已单独安装侧栏,内嵌副本会自动退让,不与独立 bundle 重复挂载(v0.8.7+ 起顺序无关,早期版本若独立侧栏排在 dsh-remote 之后可能因重复路由 /sidebar/api 导致启动失败)。
环境要求:profile 的 pnpm linker 须为 hoisted(DSH profile 默认值,即 pnpm-workspace.yaml 中 nodeLinker: hoisted)。
典型用法¶
1. 添加插件并配置主机¶
dsh plugin add dsh-remote
启动 DSH 后,打开 Settings →「远程工作区」,添加 SSH 主机(密钥或密码),点「测试连接」确认可达,设为当前机器。
2. 选择远程工作区¶
在 DSH 原生「添加工作区」流程中,切到「远程」标签:选机器 → 浏览或输入远端路径 →「设为远程工作区」。本地镜像创建完成后,工作区即被 harness 采纳。
3. 让智能体操作远端¶
连接建立后,智能体可通过 rw_* 工具在远端读写文件、执行构建命令。例如同步远端变更到本地镜像:
rw_sync
将本地镜像推回远端(冲突时先查看报告,必要时 force=true):
rw_push
需要访问远端内网服务时,在 Settings 或工具里配置 rw_forward 本地端口转发。
4. 侧栏直接编辑¶
在 better-sidebar 的远程文件标签页打开文件,编辑后「保存到远程」;若远端已被他人修改,按提示重新读取再保存。
适用场景与注意¶
适合谁
- 日常在 DSH 里驱动智能体,但代码、构建、测试环境在远程 SSH 主机上的开发者
- 需要同时管理多台机器(云服务器、跳板机后的内网主机、Windows 远程桌面替代方案)的场景
- 希望在单一 harness 界面完成远端文件浏览、编辑、命令执行与目录同步,而不改 harness 核心的用户
使用前注意
- 权限边界:插件以当前 DSH 进程权限运行,可读写你配置的 SSH 凭据、本地镜像目录并执行远端命令。安装前应阅读 源码 与 MIT 许可证,确认符合你的安全策略。
- 密码与密钥:密码存本地(可选 OS 钥匙串加密),私钥路径由你指定;插件不从
~/.ssh/config读取密钥内容,但连接时会使用你填写的路径。 - 同步冲突:默认不静默覆盖双侧修改;推送前留意
rw_sync/rw_push的冲突报告。 - 侧栏版本:若从 ≤0.8.6 升级且单独安装了
dsh-better-sidebar,v0.8.7+ 已修复 bundle 顺序导致的重复路由问题;也可移除独立侧栏,改用内嵌副本。
结尾¶
dsh-remote 把「出站 SSH + 远程工作区 + 本地镜像」封装进 DSH 插件模型:不改 harness 核心,用 SFTP 统一跨平台文件访问,用三方同步避免静默覆盖,用审计日志和 host-key TOFU 补上基本可追溯与安全校验。若你的开发环境在远端,值得把它列入 DSH 联网工具清单。