dsh-remote:把 SSH 主机接进 DeepSeek Harness 工作区

前言

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 体检与部署」:

  1. 体检(只读):平台、node/npm/dsh 版本、原生模块能否启动、代理与 npm 源等,不写远端。
  2. 部署并验证(0.8.40+ 可直接点,不必先体检):装到远端私有目录(默认 ~/.dsh-remote/dsh),不写系统目录、不改 PATH;删除目录即可回滚。成功后按机器记住 dsh 路径。
  3. 失败时可使用内置 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 快速上手三步走:

  1. 加一台机器 —— 设置 → 远程工作区 → 填写 host/port/user 与密码或 key → 设为当前。(保存不等于激活,只有「设为当前」或 Agent 调用 rw_connect 才进入 remote context。)
  2. 选工作区 —— Add workspace:本机 tab 为本地目录;远程 tab 选机器并浏览到目录 →「设为远程工作区」。
  3. 让 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。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye