Pular para o conteúdo principal
D

deepseek-harness-ssh

devourerm/deepseek-harness-ssh

为dsh配置ssh通道,使得可以在文件夹里面配置远程服务器的文件夹

Instalar

dsh plugin --profile web add github:devourerm/deepseek-harness-ssh

README

DSH SSH 远程文件夹

把远程文件夹加入本地 DSH 的工作区列表。本地模型和账号通过 SSH 直接读取、写入、编辑远程文件,在远程目录执行命令;聊天、模型设置与会话保存在本机。

0.5.2 在 Host 返回文件页结果前,把符号链接目录的真实路径改回文件页请求的路径。这样即使远端 worker 返回了链接目标,目录缓存也不会写到错误的键上,展开后不会一直显示「加载中」。

0.5.1 修复文件页展开远程符号链接目录时一直显示「加载中」。目录列举和目录观察都按文件页请求的链接路径返回,不再改写成链接目标的真实路径;符号链接目录可以像普通目录一样展开、继续进入子目录,并保持自动刷新。沙箱仍按解析后的真实路径检查边界。

0.5.0 在工作区的 … → 工作区配置 中增加配置窗口。SSH 工作区可修改名称、已保存的 SSH 主机和远程目录,保存前检查目标目录并保留工作区标识与原有对话;窗口支持临时认证和目录浏览。切换目标前需结束该工作区的运行任务及终端;并发修改会提示重新加载配置。本地工作区可修改名称,目录保留当前 DSH 的固定关联。

0.4.2 使用本地 Host 架构。远端只需要 SSH、SFTP、POSIX 环境与 Python 3,无需配置模型账号、安装 DSH、Node 或 npm。Windows 本机 + Rocky Linux 9 远端已在 DSH 0.2.1-rc.3 上实机验证;官方 DSH 0.2.1-rc.5 运行时已验证宿主加载、单元测试与 Host API,兼容范围同时保留 0.2.1-rc.3。其他宿主版本和 macOS 远端尚未实机验证。

0.4.2 修复侧栏展开目录时偶发的 Channel open failure: open failed。文件操作、SFTP、终端和命令共用按 SSH 连接管理的通道队列,目录操作优先于后台观察;服务器暂时拒绝打开通道时自动退避重试并降低短请求并发。折叠目录和切换会话会取消待处理的观察请求,相同目录的重复观察不会重复开通道。已启动的命令或可能已经执行的写入不会自动重放,也不会为恢复目录读取而断开现有终端。

0.4.1 只更新宿主兼容范围与验证脚本,插件行为与 0.4.0 相同:@deepseek-ai/dsh-fs、@deepseek-ai/dsh-tools 的 peer 范围接受 DSH 0.2.1-rc.5,开发运行时默认使用 rc.5,安装测试会校验宿主插件真实启用。

0.4.0 接入原有右侧栏的新建终端。SSH 工作区会列出服务器的 Shell,在远程当前目录启动 Linux PTY,支持交互输入、中文、窗口缩放、Ctrl+C、退出码和关闭时的进程清理,修复远端目录被交给 Windows 本机 Shell 导致的退出码 267。终端需要 Linux /proc、Python 标准库与可用的交互 Shell。

0.3.1 修复 Windows 本机创建 SSH 子智能体时,远程目录被宿主转成带盘符路径,导致“SSH 工作区只接受远端 POSIX 路径”的问题。支持 spawn、fork、嵌套子智能体,以及当前目录继承、相对目录和显式远程目录;原生权限与真正本机路径的拒绝规则保持生效。

安装与配置

  1. 打开 DSH 插件 → 添加插件,在“包名或地址”填写安装包绝对路径:

    D:\code\dsh-plugin\deepseek-harness-ssh\dist\deepseek-harness-ssh-0.5.0.tgz
    
  2. 安装并选择 立即启用,按宿主提示重启。

  3. 打开 设置 → SSH 远程工作区,保存独立配置并点击 检查连接:

    Host my-server
      HostName 192.168.1.20
      User developer
      Port 22
      IdentityFile ~/.ssh/id_ed25519
    
    Host bastion
      HostName gateway.example.com
      User developer
      IdentityAgent default
    
    Host private-server
      HostName 10.0.0.20
      User developer
      ProxyJump bastion
    
    Host *
      ConnectTimeout 15
      ServerAliveInterval 15
    

首次连接需要核对 SHA256 主机指纹。缺少登录密码或加密私钥口令时会弹出输入框,提交后继续原操作;错误密码可以重输。密码只用于当前连接,不写入配置或浏览器持久存储。断线后自动尝试密钥认证,必要时在本地窗口重新提示密码;也可以取消连接。跳板机使用独立凭据。支持单个密码提示的 keyboard-interactive;多轮验证码/MFA 尚不支持。

配置位于 %USERPROFILE%\.dsh\plugins\deepseek-harness-ssh\config,或 $DSH_HOME/plugins/deepseek-harness-ssh/config。配置与主机指纹库独立于 VS Code 和 OpenSSH 配置。可以引用已有私钥;不会转发 SSH Agent。支持上述指令、IdentityAgent none、引号、注释、Key=Value 与 Host * 默认值。出于兼容性仍接受旧的 NodePath 字段,当前版本不使用它。拒绝 Include、ProxyCommand 和任意本地命令。

使用远程文件夹

  1. 点击 添加工作区,选择 远程文件夹 · SSH。
  2. 选择主机,浏览或输入远程目录,例如 ~/project。
  3. 点击 连接并创建远程工作区,本地工作区列表出现 SSH · 主机 · 目录。
  4. 继续使用本地现有模型聊天。原生 read、write、edit 直接操作远程文件,glob、grep 使用远程 Python 搜索,命令使用 ssh_exec。
  5. 右侧栏打开原有的 文件 即可浏览、预览和编辑远程文件。兼容现有 dsh-better-sidebar,无需切换到额外入口。
  6. 点击原有的 新建终端,在远程当前目录打开服务器的交互 Shell;Shell 菜单使用服务器可用项,本地工作区仍使用本机终端。

文件更改直接发生在服务器,支持中文、空格、版本冲突保护和原子替换。文件树通过远程目录观察自动刷新,也可使用现有刷新按钮。搜索跳过隐藏目录、node_modules、__pycache__,最多扫描 10000 个文件、返回 1000 条结果;内容搜索使用 Python 正则,跳过超过 2 MiB 的文件,不解析 .gitignore。

每条 SSH 连接最多同时运行 3 个短请求,通道拒绝时临时降低到 1–2 个;普通通道总预算为 9,最多 8 个长任务,并为终止命令保留控制容量。排队计入原操作超时,取消请求会从队列移除。服务器持续拒绝通道时最多重试 5 次,然后给出繁忙提示;较低的服务器会话配额或长期资源耗尽仍可能限制可同时使用的终端数量。

默认权限由本地 DSH 管理:只读模式拒绝直接写入,工作区写入模式检查远端规范路径及软链接边界。ssh_exec 的远程 Shell 不受本机操作系统沙箱约束,因此非完全访问模式下每次命令走 DSH 原生审批;完全访问模式按用户所选权限执行。远端命令不会退回本地 PowerShell。

侧栏终端沿用 DSH 原有的用户终端权限语义:用户输入按服务器账号权限执行,不受模型文件工具的工作区沙箱约束。界面刷新或重连保留 Host 上已建立的终端。关闭标签页时清理该 PTY 会话内仍运行的进程;SSH 连接丢失后交互进程不自动恢复,新建终端会重连,必要时继续使用既有密码提示。活动观察不推测 Shell 已空闲,无法确认时返回 unknown。

兼容边界

DSH 的工作区注册硬编码本机路径,因此本机保留一个空的身份目录和持久映射,接入原生工作区列表;项目文件不会复制或同步到该目录。插件只对已登记的 SSH 工作区路由文件系统与进程操作,普通本地工作区继续使用原实现。卸载插件不会删除服务器文件。

  • 已验证原生模型工具、工作区创建、会话、文件树/预览、本地模型设置和原生命令审批,以及 spawn/fork 和嵌套子智能体的远程原生文件读写。
  • 已接入 dsh-better-sidebar 0.28.0 原有文件页:目录树、搜索、文本编辑保存、保存冲突检测、新建/重命名/删除、上传下载、媒体读取及目录自动刷新。请求按会话路由,切回本地工作区仍调用原插件的本地实现。没有新增“SSH 文件”卡片。其 Git 页仍未接入远端,远程 Git 请使用 ssh_exec。
  • 原有侧栏交互终端已在 Linux 远端验证,支持前台中断、后台进程清理、SSH 通道结束清理与退出状态。主动创建新会话(setsid)或脱离会话的守护进程不属于该 PTY 的会话清理范围;远程 Shell 不使用本机系统沙箱。
  • 依赖本机暂存目录的 Git 快照暂不支持 SSH 工作区。可使用远程终端或 ssh_exec 执行远程 Git、构建和其他命令。
  • 目前不支持远端 Windows、会话在本地/远程之间迁移、远程端口转发 UI,以及任意依赖本地磁盘路径的第三方插件。
  • 0.1.x 的远程 Host 会话不会自动迁入本机会话。0.3.0 不再启动远端 DSH,旧版本遗留的远端运行时文件保留,当前功能不依赖它们。

开发与验证

npm ci --ignore-scripts --omit=optional
npm run build
npm test
npm run test:host
npm run test:ui
# 有实际 SSH 配置及已安装 better-sidebar 时:npm run test:files
npm run test:terminal
npm run test:terminal-ui
npm run pack:plugin
npm run test:install

通过 DSH_DEV_RUNTIME 指定宿主测试所用的 node_modules。未设置时优先使用 ../tree-chat/research/compat-0.2.2-rc.2/dsh/node_modules,并回退到已安装的旧版测试运行时。集成脚本会把实际读到的宿主版本写入 artifacts/*-result.json。UI 测试需要 SSH_PLAYWRIGHT 指向 Playwright 的 index.mjs,可选 SSH_CHROMIUM。npm run test:install 在隔离 DSH_HOME(位于系统临时目录,避免 Node 包自引用)中通过真实插件界面安装并立即启用 tgz,校验宿主插件 API 真实可用后再打开 SSH 设置页。npm run test:remote 读取本机忽略的 artifacts/real-server/config 与独立主机指纹,在服务器专用验证目录运行本地模拟模型及真实 SSH 文件测试,不请求外部模型。

远程文件页支持 UTF-8 文本编辑(保留 BOM 和 CRLF),超过 5 MiB 的文本分页只读;上传与保存上限 8 MiB,单次媒体读取/下载上限 16 MiB。非 UTF-8 文件不会按 UTF-8 覆写。文件页受当前会话权限及远端工作区路径边界约束。

安装包包含构建产物与纯 JavaScript SSH/WebSocket 依赖。node scripts/install-desktop.mjs 可更新本机 Desktop profile,保留模型设置和其他插件,并备份清单与旧插件。详见 实现计划 和 验证记录。本项目使用独立 Git 仓库,MIT License。

Plugins relacionados