DSH (DeepSeek Harness) 的核心设计理念之一是插件化。当需要在远程服务器进行开发,但又希望保持本地会话、Web GUI 和 $DSH_HOME 不变时,传统的 SSH 工具链往往无法满足这种“本地控制、远程执行”的集成需求。
dsh-remote-ssh 正是为了解决这个问题。它是一个 DSH 插件,允许你将工作空间的文件 I/O 和命令执行转移到 SSH 目标主机上,同时保持会话管理、Web GUI 和本地配置在当前机器运行。
核心能力¶
该插件提供以下功能:
- SSH 连接管理器:在 Web GUI 中添加、测试或移除连接。支持密码、私钥、SSH Agent 以及 ProxyJump 链式跳转。
- 远程目录浏览器:在 GUI 中浏览目标主机的目录树,并将任意目录“收养”为工作空间。
- 按会话路由:会话的工作目录决定其运行的主机。
ssh://<id>/<path>与其本地占位符等价,允许多个远程主机并行运行。 - 远程文件系统与子进程(全模式):在运行时上下文中,
ctx.fs和ctx.subprocess指向远程主机。Git 操作、测试、构建、读写文件均在远程执行。 - 智能代理引导:内置代理引导,运行时会话会在上下文中声明当前所在机器。提供
ssh_exec/ssh_route_status等接口以及DSH_SSH_*环境变量,避免路径误判或“空项目镜像”。 - 凭证本地化:密码和身份密钥仅保存在本地机器的 DSH Home 中。
安装与启用¶
环境要求¶
- 本地环境:Node.js >= 22.0.0
- 目标主机:已安装
python3和bash
安装命令¶
注意:不要直接运行 dsh plugin add dsh-remote-ssh,该名称会解析到不同的作者,并非此插件。
请使用以下命令从 GitHub 仓库安装:
dsh plugin --profile web add github:aijunjiang/dsh-remote-ssh
首次安装注意事项(pnpm 11)¶
ssh2 和 cpu-features 是原生模块,pnpm 11 默认会阻止其构建脚本。首次安装时可能会遇到构建错误。
- 进入 Web 配置目录:
cd ~/.dsh/profiles/web
- 编辑
pnpm-workspace.yaml,在allowBuilds下添加:
allowBuilds:
cpu-features: true
ssh2: true
- 运行
pnpm install重新构建:
pnpm install
- 重新运行安装命令以完成注册。
使用方法¶
- 添加远程连接:打开 Web GUI 的侧边栏“工作空间”面板,点击“添加工作空间”。在目录选择器中点击“+”按钮,填写目标主机信息(主机/别名、端口、用户、认证方式、ProxyJump 等)。
- 浏览与收养:保存连接后,GUI 会直接展示远程目录树。选择一个目录并打开,将其设为当前工作空间。
- 启动会话:在工作空间中启动会话。会话将路由至该远程主机,文件和命令将在远程执行。
- 运行时接口:在会话的运行时上下文中,可以直接使用
ssh_exec或ssh_route_status来与远程主机交互。 - 启动 GUI:使用
pnpm dsh web启动插件提供的 Web 用户层。
补充说明¶
- UI 增强补丁:插件目录下包含
harness-patches/,这是一组可选的 UI 增强补丁(如工作区标题后缀home · root@…和任务列表的 Stop 按钮)。这些补丁通过git apply应用到 harness 源码中,不影响核心路由功能,但依赖 DSH 基线版本兼容。 - 兼容性:当前版本(v0.3.3)要求 DSH 基线版本为
0.1.5-rc.1。
总结¶
dsh-remote-ssh 解决了 DeepSeek Harness 环境下远程开发路径过长、凭证管理分散的问题。它通过 SSH 协议将执行上下文“搬运”到远程,同时保留了本地开发工具链的便利性,适合需要在远程服务器上运行 CI/CD、测试或构建任务的场景。