dsh-ssh-workspace:把 SSH 主机目录当作 DSH 工作区

前言

在 DSH 里做智能体开发,文件读写、shell、搜索和变更追踪通常都落在本机工作区。若代码和构建环境在远程 Linux 服务器或云主机上,常见做法是 rsync/scp 同步、网络盘挂载,或 SSH 进机器另开一套编辑器。这些路径要么多一步同步,要么依赖第三方文件系统,DSH 的 read / write / edit 与沙箱语义也难以直接延伸到远端目录。

下面介绍社区插件 dsh-ssh-workspace(维护者 siqyka,GitHub:siqyka/dsh-ssh-workspace)。它在 DSH 的 ctx.fs(@deepseek-ai/dsh-fs)抽象上增加「远端半边」:通过 SFTP 读写远端文件,shell、ripgrep、git 等落在远端主机执行,无需手动同步、挂载驱动或安装第三方文件系统。插件归类为 SkillHub 目录下的「联网工具」。

这是什么

dsh-ssh-workspace 把一台 SSH 主机上的目录登记为 DSH 工作区。工作区路径语法为:

ssh://<主机别名>/<远端绝对路径>
例如  ssh://myserver/home/user/project

界面里同类路径会显示为 ssh://<主机别名>@/<远端绝对路径>(别名后插入 @),便于阅读;复制与挂载、文件操作、工具调用仍使用实际拼写 ssh://<主机别名>/<远端绝对路径>。

DSH 工具层(read / write / edit / bash / glob / grep、变更面板等)经 ctx.fs 路由:ssh:// 前缀走本插件的 SFTP 后端,其余路径仍走部署原有的本地(沙箱)后端。本地工作区的沙箱写入围栏、版本守卫、原子写入等行为保持不变;远端工作区使用同一套工具与错误语义。

核心功能

SFTP 直通与文件语义

  • read / write / edit 全程走 SFTP,支持完整错误语义(如 FS_STALE_VERSION、FS_NOT_OBSERVED、FS_AMBIGUOUS_EDIT、FS_NOT_FOUND 等)。
  • 原子写入:先在同目录写暂存文件再替换;优先 posix-rename@openssh.com,不支持时退化为先删后改名。
  • 远端写入仅允许落在已挂载的远端工作区内,越界返回 FS_OUTSIDE_WORKSPACE;「仅可查看」模式会阻止远端写入(FS_SANDBOX_DENIED)。读取不受此限。
  • 大文件按 256 KiB 块流式读取;远端目录变更优先用 inotifywait 推送,未安装时回退轮询。

远端执行

  • 会话工作区为 ssh:// 时,pwsh / bash 在远端以 POSIX shell 语义执行;glob / grep 调用远端主机上的 rg(未安装时明确失败,退出码 127)。
  • 「变更」面板用远端 git 做快照与 diff;远端未装 git 时自动降级关闭,其余功能不受影响。

界面与 Agent 工具

侧栏提供文件树、@ 远端文件引用、拖拽进任务、主机管理面板、浏览目录对话框,以及上传/下载等。重启客户端后会从持久化 registry 自动重新挂载已登记的远程工作区。

插件向 Agent 暴露的工具包括(完整参数见仓库 docs/tools.md):

工具 用途
ssh_workspace_hosts 列出可用主机
ssh_workspace_mount / unmount / enable 挂载、停用、重新启用远端工作区
ssh_workspace_status 挂载列表与连接状态
ssh_workspace_exec / shell 远端执行命令(shell 可跨调用保留状态)
ssh_workspace_transfer 本机与远端 SFTP 传文件
ssh_workspace_forward / unforward 端口映射

安装与启用

环境要求(见仓库 README 与 package.json):Node >= 20,DSH >= 0.2.0-rc.1,依赖 ssh2 ^1.17.0;许可证 MIT。

  1. 打开 DSH 官方桌面客户端,进入「设置」中的「插件」页面(或左侧导航栏的插件入口)。
  2. 在插件管理界面的安装输入框中二选一,点击安装:
    - npm 包(支持锁定版本):
     @shiqyka/dsh-ssh-workspace
 或指定版本,例如:
     @shiqyka/dsh-ssh-workspace@0.2.6
  • 仓库地址:
     https://github.com/siqyka/dsh-ssh-workspace
  1. 安装完成后重启客户端。

插件配置项(通常使用默认即可):

字段 默认 含义
enabled true 总开关
announceToAgent false 是否向 agent 注入能力说明
engine.idleTimeoutMs 1800000 连接空闲回收时间(毫秒)
engine.connectTimeoutMs 15000 SSH 握手超时
engine.keepaliveIntervalMs 15000 keepalive 间隔
engine.sweepIntervalMs 60000 空闲连接扫描周期

典型用法

经过上面的安装与重启,可按以下流程使用:

  1. 在「远程工作区」面板确认或添加主机(首次使用可在此添加)。
  2. 选择「添加工作区 → 新建远程工作区」,选定主机、浏览远端目录并挂载。
  3. 在该工作区新建会话;文件读写、shell、搜索与变更追踪会自动落到远端。

主机记录默认存放在 $DSH_HOME/dsh-ssh.json;若无该文件,会只读回退读取 ~/.ssh/config 里具体的 Host 块,已配好的 SSH 主机通常无需重复填写。密码与私钥口令加密保存在 dsh-ssh.json 的 secrets 段,不会回传到浏览器。

每个主机别名维持一条长连接(常开 SFTP 通道);空闲约 30 分钟回收。首次连接采用 TOFU 记录主机密钥指纹,指纹变更会拒绝连接,可在面板「忘记主机密钥」后重新信任。

适用场景与注意

适合:开发机与运行环境分离、需要在 DSH 里直接改远端项目、在远端跑构建/测试/git diff,又不想维护同步脚本或 FUSE 挂载的用户。

明确限制(见 README「限制」):

  • 不支持跳板机 / ProxyCommand:引擎仅直连目标主机;带 proxyJump / ProxyCommand 的主机会在解析时被拒绝并说明原因。
  • 会话工作区为 ssh:// 时,shell 在远端以登录用户权限运行,不受本机文件沙箱约束;本地 workdir 的命令仍在本机沙箱内。

DSH 社区插件由维护者独立发布;SkillHub 目录页(dsh-ssh-workspace)与 GitHub 仓库并非 DeepSeek / 幻方官方应用商店。安装前建议查看源码与 MIT 许可证,确认插件以当前 DSH 进程权限运行,主机凭据存储策略是否符合你的安全要求。

链接

  • 目录页:https://www.skillhub.cn/plugins/siqyka/dsh-ssh-workspace
  • 仓库:https://github.com/siqyka/dsh-ssh-workspace
  • npm:https://www.npmjs.com/package/@shiqyka/dsh-ssh-workspace
羽毛球分组比赛记分
小程序二维码

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

小夜