dsh-remote-deck:把远程机器变成 DSH 本地工作区

前言

用 DSH 做远程开发时,一种常见做法是先把远端目录同步或挂到本地,再把 DSH 的工作目录指向它。这样做的问题是:工作区其实是本地的一份镜像,远端真实目录改了什么需要自己同步;端口转发要手工开,远端的操作又散在另一套终端窗口里。结果是本地会话和远端会话分成两条线,上下文对不上。

下面介绍的 dsh-remote-deck 换一种方式:插件直接在 DSH desktop 里连上 SSH 目标机,把一个远端目录注册成 DSH 的一个普通工作区(workspace stub)。之后 agent 读、写、搜索、跑命令、开终端、转发端口,全部走远端那台机器,界面还是 DSH 里那个窗口。

这是什么

Remote Deck(包名 dsh-remote-deck)是 DeepSeek Harness 的客户端插件,仓库在 GitHub 的 dsh-plugins-cn/dsh-remote-deck,README 标题写的是「SSH workspaces for DeepSeek Harness — one window, local and remote conversations side by side」。社区目录把它归在「客户端」分类,当前 GitHub 星标为 1(以 2026-11-06 目录页与仓库页为准)。

它解决的是:让一台远端 Linux/macOS 机器上的目录,在 DSH 里看起来像本地工作区。远端不需要装任何 agent,只需要有 sshd。

需要说明的是,DSH 的理念是「一切皆插件」,社区目录是独立站点,不是 DeepSeek 的官方应用市场;其上收录的插件也不是官方应用。安装前建议自行检查源码。

核心功能

README 的功能表分六块,这里只列出已核实的内容。

连接管理。支持多台主机同时连接,认证方式为密钥或密码;可以导入 ~/.ssh/config;连接前会返回操作系统类型和延迟,支持每台主机的 auto-connect(默认关闭,可在对话框、快速面板或控制台里切换)、keepalive 和断线重连退避。每台主机有自己的颜色标识。

工作区。可以按面包屑路径浏览远端目录,带过滤器和键盘导航;选定目录后添加为 DSH 工作区,可以自定侧栏显示名;从侧栏移除工作区只是本地注销,不碰远端目录。

会话标识。远端会话会带上头部胶囊、侧栏彩色角标和悬停行,本地会话不受影响。

控制台。Console 提供机器栏、主机概览、统计、工作区卡片、最近会话、搜索,以及一个远端文件浏览器,支持下载、另存到本地、在系统里定位。

终端。远端终端是一个完整 xterm.js 终端(PTY 通道),支持颜色、光标、全屏程序、粘贴和回放缓冲。

端口转发。自动发现远端监听端口,一键转发,配置可持久化并在重连后恢复。

主题跟随 DSH 的 theme token,亮色和暗色都支持。

插件没有 npm 依赖:ssh2 及其依赖树放在 vendor/node_modules,终端资源放在 vendor/xterm,因此安装过程不会执行 package build scripts。

架构:远端只需 sshd

README 给出的架构图是这样的:DSH desktop 侧跑会话、侧栏和 Remote Deck console,插件在 host 侧提供连接池、工作区 stub 和 loopback API;两边通过 SSH 通信,具体是 exec channels(跑命令)、SFTP(文件)、PTY(终端)、direct-tcpip(端口转发)。

这套实现值得说一句,因为它决定了你能做什么、不能做什么。远端工作区实际上是 <DSH_HOME>/remote-deck/workspaces 下的一个带标记的 stub 目录,标记里记录连接 id 和远端 POSIX 路径。所有在此目录下的路径请求都通过 SFTP 解析,命令通过 exec channel 以远端 cwd 执行,ripgrep 移到目标主机上跑,终端是一个 PTY channel,转发是每个端口一个本地 listener。

也就是说,远端不需要部署 agent,也不需要装包;代价是 SSH 协议本身能提供的能力,才是插件的能力边界。

安装与启用

这一步把插件装进 DSH。官方 README 给了四条安装路径,按你的环境选一条即可。

一、npm 名称(推荐)

插件市场(上架后)或 npm:

dsh plugin add dsh-remote-deck

二、从 GitHub 安装

dsh plugin add git+https://github.com/dsh-plugins-cn/dsh-remote-deck.git

三、国内网络走代理

在中国大陆,README 给出的是 GitHub 代理:

dsh plugin add "git+https://ghproxy.laiyouxi.com/https://github.com/dsh-plugins-cn/dsh-remote-deck.git"

四、从 checkout 安装

如果已经把仓库拿到本地,README 给的步骤是在 clone 下来的目录里跑 install.ps1:

git clone https://github.com/dsh-plugins-cn/dsh-remote-deck.git
cd dsh-remote-deck
powershell -ExecutionPolicy Bypass -File .\install.ps1 -Profile desktop

装完请重启 DSH 或按 Ctrl+R。之后侧栏底部会出现 SSH 状态片,侧栏导航里会出现「远程开发」。

README 里的截图来自 docs/design/v2/ 的脱敏设计稿,主机名、地址和路径都是演示数据(dev-box、203.0.113.10、/srv/demo-app)。

环境要求

DSH desktop 0.2.x 或更高;Node 20+;远端主机需要有 sshd,操作系统为 Linux 或 macOS,远端 shell 为 bash。

从 dsh-remote-ssh 迁移

Remote Deck 是 dsh-remote-ssh 的继任者。README 写了几个值得注意的点:

  • 首次加载时,它会把 <DSH_HOME>/remote-ssh 下的连接复制过来,并且原地复用已有的 workspace stub,所以工作区和会话在侧栏里的位置不变。
  • 旧插件在删除前仍可继续工作。两个插件都会 patch ctx.fs,所以一个 profile 里只能启用其中一个。
  • 一行命令完成切换,脚本会先备份 package.json,并保留旧插件文件以便回滚:
.\install.ps1 -Profile desktop -RemoveOld
  • 任何时候可以回滚:
.\install.ps1 -Rollback   # 恢复 package.json.bak-before-deck

数据存放在 <DSH_HOME>/remote-deck,重装插件不会丢失。

典型用法

下面按 README 描述的顺序走一遍。

  1. 装好插件后重启 DSH,侧栏出现 SSH 芯片,点进去进 Remote Deck console。
  2. 添加一台机器。认证支持密钥和密码;密码和密钥 passphrase 存放在 DSH credential store,而不是 connections.json,这是 README 明确写明的。连接对话框里可以测连接,能看到远端操作系统和延迟。
  3. 在远端文件夹浏览里用面包屑和过滤器找到目标目录,比如某个服务的仓库根目录,add 成工作区,给它起一个侧栏显示名。
  4. 在这个工作区里开一个 DSH 会话。agent 的读写落到远端目录,搜索走远端 ripgrep,命令按当前目录执行。会话在侧栏里会有颜色标识。
  5. 需要交互式操作时打开终端(PTY),常规的全屏程序、颜色输出都支持。
  6. 需要访问远端监听的服务端口时,在 Ports 里看自动发现的结果,一键转发;README 说明转发配置会持久化,并在重连后恢复。如果自动发现不可用,手动转发仍然可以。

安全边界

这几条来自 README 的 Security 一节:

  • 密码和密钥 passphrase 只进 DSH credential store,connections.json 里不会出现。
  • 浏览器侧通过 loopback HTTP server 与 host 侧通信,由一个每会话 token 保护。
  • 终端和端口转发入口挂在同一个 token 之下。
  • 移除工作区只做本地注销,插件不会删除远端文件。

已知限制

README 自己列了四条,用之前值得先知道:

  • 终端用的 xterm.js 是 vendored 构建。如果 asset loader 被拦截,插件会退化为纯文本行渲染器。
  • UI 以中文为先,英文字符串计划在 v1.1.0 加入。
  • ~/.ssh/config 导入覆盖 Host / HostName / Port / User / IdentityFile / ProxyJump 这些字段,但 proxy 命令和 host-key pinning 还没接进连接对话框。
  • 自动发现端口依赖远端有 ss 或 netstat;没有的话手动转发仍可用。

适用场景与注意

适合谁:DSH desktop 用户,需要在 Linux/macOS 远端机上做开发或运维,希望 agent 直接操作远端文件与命令,同时保留 DSH 会话上下文,并且不希望在远端部署 agent。从 dsh-remote-ssh 迁过来的用户也可以直接切过来。

几点提醒:

  • 插件运行在 DSH desktop 进程内,以当前 dsh 进程的权限访问本地文件系统、loopback HTTP 端口和 SSH 出站连接。安装前请检查源码与许可证——仓库许可证为 MIT,版本号 1.2.7(来自仓库的 package.json)。
  • 一个 profile 里只启用 Remote Deck 或 dsh-remote-ssh 之一,两者都会 patch ctx.fs。
  • 星标数与目录页分类属于当前状态,接入前可以到仓库页再看一眼。
  • 远端需要 sshd 且 shell 是 bash;自动端口发现还需要 ss 或 netstat。

结尾

Remote Deck 的价值在于把「本地工作区」和「远端机器」这两件事合到 DSH 的同一个窗口里,不需要在远端装 agent,也不用自己维护同步和端口转发。功能边界由 SSH 协议决定,README 把已知限制写清楚了,接入前值得读一遍。

目录页:https://www.skillhub.cn/plugins/dsh-plugins-cn/dsh-remote-deck
仓库:https://github.com/dsh-plugins-cn/dsh-remote-deck

开发侧 README 还提供了 npm run check(语法与 manifest 检查)、npm test(parser 单测)和 npm run pack:dry(查看发布文件列表)三条命令,供修改插件的人自测。

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

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

小夜