前言¶
DeepSeek Harness(DSH)的 Web 界面默认只监听 127.0.0.1,CLI 也会拒绝 --host 0.0.0.0,这是有意避免把远程代码执行能力暴露到公网。日常开发里却常见另一套需求:代码和构建在机房或内网机器上,Agent 要在远端列目录、改文件、跑命令,又不想 fork 一套「远程专用」工具链,或改 dsh-workspace 核心。
下面介绍 dsh-remote:以插件形式维护多台 SSH 机器,在 Harness 里选「远程工作区」时创建本地镜像并由 SFTP 同步,Agent 可沿用工作区与文件流;连不上时还有只读体检与一键部署到远端私有目录。本文事实来自 GitHub README 与 npm 包 dsh-remote@0.8.54 的 package.json。
这是什么¶
dsh-remote 是面向 DeepSeek Harness 的远程工作助手(npm 包名 dsh-remote,许可证 MIT)。README 标明由 @flymysql 维护,仓库主页为 github.com/flymysql/dsh-remote。
定位可以概括成:由本机主动 SSH 连出到你维护的机器,选定目录后 Harness 收养一个真实的本地镜像工作区,读写与命令在远端执行;不改动 dsh-workspace 官方代码。包描述中还提到可选的 transparent mode:在启用时把标准 DSH 工具路由到远程镜像(与 legacy 的 rw_* 工具并存,具体开关以插件设置与文档为准)。
核心功能¶
远程工作区与三路同步¶
- 设置 → 远程工作区:多机列表、密码或密钥、高级项(私钥、跳板机、agent 等)。
- 原生 Add workspace / 选择工作区 弹窗有两个 tab,默认「本机」;切到 「远程」 后选机器、浏览或输入路径,点「设为远程工作区」会创建本地镜像并持久化到该机器。
- 路径框支持实时补全;Windows 远端根级有多盘视图;确定后通过 SFTP 保持同步。
- 机器清单与镜像数据在
$DSH_HOME/remote-workspaces;0.6 之前的数据首次启动会自动迁移。
legacy 模式:22 个 rw_* 工具¶
便于复制与检索的完整列表:rw_info、rw_connect、rw_machines、rw_pick_workspace、rw_list_dir、rw_stat、rw_read_file、rw_write_file、rw_edit、rw_append、rw_mkdir、rw_remove、rw_move、rw_exec、rw_search、rw_download、rw_upload、rw_sync、rw_push、rw_forward、rw_disconnect、rw_deploy_probe。
Remote context 是会话级的:只有当前 session 的工作区落在某个远程镜像路径下时,system prompt 才会注入「Remote workspace」;普通本地会话不会被动调用 rw_*。
会话与会话标识¶
DSH 0.8.43+ 起,会话列表区分本地/远程:远程会话行首有绿点,悬停显示 user@host:port 与远端路径;打开后标题栏常显主机标签。判定依据是会话 cwd 是否在 $DSH_HOME/remote-workspaces/… 镜像内。
在本机打开远端 DSH Web 界面¶
0.8.36+:无需在远端开放端口。插件 SSH 到远端,在 127.0.0.1 上启动 dsh web,经隧道映射到本机 loopback 端口。用法:设置 → 远程工作区 → 「远程 DSH 界面」 → 选机器 → 连接并打开。地址形如 http://127.0.0.1:3088/?token=…,token 为一次性凭据,请勿外发。
远端 Node 需 ≥ 20.12(node:util 的 parseEnv 从该版本起可用);过旧时体检会报 blocker。
体检与一键部署¶
连不上时 README 强调:多数情况是远端 dsh 版本或环境不对,而非插件本身。设置 → 「远端 dsh 体检与部署」:
- 体检(只读):平台、node/npm/dsh 版本、原生模块能否启动、代理与 npm 源等,不写远端。
- 部署并验证(
0.8.40+可直接点,不必先体检):装到远端私有目录(默认~/.dsh-remote/dsh),不写系统目录、不改 PATH;删除目录即可回滚。成功后按机器记住 dsh 路径。 - 失败时可使用内置
dsh-remote-deploy技能排查(需主动触发,会消耗模型额度)。
相关配置包括 webInstallPrefix、webInstallVersion(默认 0.1.5-rc.2)、webInstallRegistry(留空则沿用远端 npm 配置)。
连接与其它能力¶
~/.ssh/config为连接四字段的主要来源(0.8.50+):保存机器时写入带# dsh-remote: managed的受管块,不覆盖你手写的同名 Host;改文件后立即生效。- 文件访问走 SFTP,支持 Linux/macOS/Windows 远端;Windows 命令经 Git Bash 的
bash -s执行,config.shell可定制。 - 长任务:
rw_sync/rw_push传async: true返回taskId,可查进度或取消。 - 端口转发、安全审计、侧栏编辑、自动更新等见 README 功能总览图与设置页。
自 v0.8.18 起,Web 侧边栏 dsh-better-sidebar 为可选;不装时 rw_*、设置页、同步、审计与转发仍可用。
安装与启用¶
DSH 在导入 bundle 前会校验 @deepseek-ai/dsh-* 的 peer 范围;不匹配则整包丢弃。本插件要求 DSH >=0.1.0-rc.6 <0.3.0(自 0.8.29 起跨 0.1.x / 0.2.x 线;低于 0.8.29 请先升级插件再升 DSH)。
官方 Web bundle 安装命令:
dsh plugin add dsh-remote
也可 npm install dsh-remote,并在 cordis.patch.yml 增加 - id: dsh-remote / name: dsh-remote。
插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证,确认符合你的安全策略。
典型用法¶
经过上面的安装,可按 README 快速上手三步走:
- 加一台机器 —— 设置 → 远程工作区 → 填写 host/port/user 与密码或 key → 设为当前。(保存不等于激活,只有「设为当前」或 Agent 调用
rw_connect才进入 remote context。) - 选工作区 —— Add workspace:本机 tab 为本地目录;远程 tab 选机器并浏览到目录 →「设为远程工作区」。
- 让 Agent 工作 —— 像普通工作区一样使用;远程镜像会话下可用
rw_read_file、rw_write_file、rw_edit、rw_exec、rw_search、rw_sync、rw_push、rw_forward等(完整列表见上文)。
可选:在 cordis.patch.yml 为插件配置默认机等(示例见 README「可选:CLI 默认机」)。
适用场景与注意¶
适合谁:需要在 Harness 里统一操作多台 SSH 开发机或内网主机;希望 Agent 在远端跑构建/命令,同时保留本地镜像工作区体验;或要在本机浏览器里通过隧道使用远端 dsh web 而不暴露远端端口。
注意:
- 与官方 Desktop 的适配 README 标为实验性,非 macOS 宿主等场景仍可能不完整。
- 远程 DSH 界面、部署与
rw_exec均在远端执行代码,务必限制可连主机与账号权限。 - 社区目录页(如 skillhub.cn 上的插件条目)为独立站点,与 DeepSeek / 幻方无官方从属关系;技术细节以 npm 与 GitHub 仓库为准。
结尾¶
dsh-remote 把「连出去、选目录、镜像同步、可选隧道打开远端 Web」收进一个 DSH 插件,在不改 workspace 核心的前提下扩展远程开发。进一步了解可打开目录页 skillhub.cn/plugins/ZeaoZhang/dsh-remote 与源码仓库 github.com/flymysql/dsh-remote。