dsh-ssh-remote:面向 DSH 的 OpenSSH 远程工作区插件

前言

DSH 的插件方式让客户端能力可以按需安装。对于需要远程机器上的文件、Shell 和终端操作的智能体工作流,常见问题是:远程 Host 配置分散在 OpenSSH 中,认证、代理、密钥策略不想复制进插件,同时 DSH 原生工具又需要稳定的远端执行边界。dsh-ssh-remote 就是为这个场景准备的 DeepSeek Harness 插件。它由 CrazyShout 维护,定位是 Codex 风格 SSH 远程工作区:从本机 OpenSSH 配置发现具体 Host,通过标准「添加工作区」选择远端目录,并把 DSH 原生文件、Shell 和终端操作路由到远端版本化 helper。

这是什么

dsh-ssh-remote 是 DSH 的插件。它把远端工作区的连接事实交给本机 OpenSSH,插件侧处理文件、Shell、终端和状态展示。许可证为 MIT,GitHub 仓库为 https://github.com/CrazyShout/dsh-ssh-remote

核心功能

下面按能力分列。

  • 从本机 OpenSSH 配置发现具体 Host,并保留原始 Host alias。
  • 使用标准「添加工作区」选择远端目录。
  • 将 DSH 原生文件、Shell 和终端操作路由到远端版本化 helper。
  • 自动安装并校验版本化 helper,不使用 sudocurl | shpostinstall 或远端包管理器。
  • 远端文件读取/写入使用稳定 token、临时 inode、fsync、版本复核和原子发布。
  • 远端 Shell 与真实远端 PTY 支持有界输出和断线重连继续读取。
  • Linux 上 read-only/workspace-write 进程和 PTY 使用 bubblewrap 隔离。
  • 设置页展示安装中、连接中、已连接、能力受限、重连中、错误等状态。
  • 旧 DSH host 设置仍可使用加固后的 ssh2/SFTP 兼容路径。

环境要求

安装和启用前,先确认下面这些条件:

  • 本机 Node.js 22 或更高版本。
  • DSH 0.1.1-rc.2 或兼容的更新 0.1.x 版本。
  • ~/.ssh/config 中存在具体 Host alias,且 ssh <alias> 的 batch 连接可用。
  • 远端是 POSIX 系统,并提供 Python 3.9 或更高版本。
  • Linux 上如启用 read-only/workspace-write 进程和 PTY 隔离,需要 bubblewrap(bwrap)。

helper 连接固定使用 BatchMode=yes。Web 后台连接无法回答交互式密码、PIN、passphrase 或 MFA 提示。

安装与启用

从 GitHub 安装:

dsh plugin --profile web add 'github:CrazyShout/dsh-ssh-remote'

安装后重启 dsh web。打开「设置 → SSH Remote」,可以先连接,也可以直接在「添加工作区」中选择主机。首次连接会自动安装匹配版本的 helper。

典型用法

1、把 User、Port、代理和认证信息写在 OpenSSH 配置里,不要编码为 ssh://user@host:port。保留一个具体 Host alias,例如你在本机已经能执行的 ssh devbox

2、在 Web 使用前先运行一次:

ssh devbox

按你的 OpenSSH 策略核对新主机指纹。

3、在 DSH 的「添加工作区」中选择该 Host 和远端目录。

4、使用 DSH 的文件、Shell 和终端能力;设置页会展示当前连接与能力状态。

适用场景与注意

适合已经在 OpenSSH 中维护远程 Host、密钥、证书、agent 或代理策略,并希望把 DSH 的文件、Shell 和终端操作放到远端执行的团队或个人。

需要注意:

  • 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证,并确认 MIT 许可证是否符合你的使用要求。
  • 插件不会修改 ~/.ssh/config、私钥或 known_hosts
  • DSH 上游限制:Harness Workspace 必须是真实本地目录,插件会创建很小的本地 anchor。
  • DSH 上游限制:SubprocessRuntime.spawn() 是同步接口,必须立即返回本机 PID。
  • DSH 上游限制:当前 terminal tool 没有 resize verb。
  • DSH 上游限制:DSH 历史、配置、插件和 agent loop 仍运行在本机。
  • DSH 上游限制:listDir() 暂无分页契约,超过 1000 项的目录会诚实失败。
  • 任意不合作的外部 writer 仍可能卡入最后一次检查到 rename 的极短窗口,能力报告 externalWriterRaceFree: false

短结尾

dsh-ssh-remote 的价值在于让 DSH 的远程工作区继续使用本机 OpenSSH 的 Host 配置,并把远端文件、Shell 和终端操作交给版本化 helper 处理。可确认的仓库地址是:

https://github.com/CrazyShout/dsh-ssh-remote

目录页 URL 未在已核实资料中出现,本文不给出未确认地址。

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

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

Xiaoye