前言¶
用 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 描述的顺序走一遍。
- 装好插件后重启 DSH,侧栏出现 SSH 芯片,点进去进 Remote Deck console。
- 添加一台机器。认证支持密钥和密码;密码和密钥 passphrase 存放在 DSH credential store,而不是
connections.json,这是 README 明确写明的。连接对话框里可以测连接,能看到远端操作系统和延迟。 - 在远端文件夹浏览里用面包屑和过滤器找到目标目录,比如某个服务的仓库根目录,add 成工作区,给它起一个侧栏显示名。
- 在这个工作区里开一个 DSH 会话。agent 的读写落到远端目录,搜索走远端 ripgrep,命令按当前目录执行。会话在侧栏里会有颜色标识。
- 需要交互式操作时打开终端(PTY),常规的全屏程序、颜色输出都支持。
- 需要访问远端监听的服务端口时,在 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之一,两者都会 patchctx.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(查看发布文件列表)三条命令,供修改插件的人自测。