DeepSeek Harness 插件:dsh-ssh-tunnel

前言

在 DeepSeek Harness (DSH) 的开发场景中,智能体往往需要访问远程服务器进行部署、调试或数据交互。dsh-ssh-tunnel 是一个社区插件,旨在解决多主机 SSH 访问的权限管理、会话维护和交互界面问题。它为 dsh-better-sidebar 提供了 SSHManager 工具,并实现了多主机隧道管理。

插件定位

  • 名称:dsh-ssh-tunnel
  • 类型:DeepSeek Harness 社区插件
  • 维护者:thirsty5034
  • 定位:多主机 SSH 隧道 + SSHManager 工具
  • 兼容性:面向 dsh-better-sidebar (>= 0.12)

核心功能

该插件提供了一套完整的 SSH 管理机制,核心能力如下:

  1. 主机清单与密钥管理:在本地维护主机清单(hosts.json)和密钥(secrets.json)。这些敏感信息不会暴露给模型,仅用于插件内部处理。
  2. 项目范围授权:支持基于项目的权限控制。通过 projectPathKey(通常为工作区目录)关联可访问的主机列表,实现细粒度的访问控制。
  3. 模型工具 SSHManager:为模型提供标准化的工具接口。支持 exec(执行命令)、sftp_list(列出文件)等操作,并支持会话策略(如复用或新建会话)。
  4. 侧边栏管理:提供侧边栏选项卡,用于管理主机 CRUD、项目授权以及会话的连接/断开。
  5. 交互式界面:在中心覆盖层提供交互式终端(基于 xterm)和双面板 SFTP 文件管理界面。
  6. 非侵入式设计:插件不尝试用单一远程磁盘替换全局的 fs 或 subprocess,保持 DSH 原有的文件系统架构。

安装与启用

安装建议通过 CLI 官方源进行,确保版本与 DSH 环境匹配。

export DSH_HOME=${DSH_HOME:-$HOME/.dsh}
dsh plugin --profile web add "dsh-ssh-tunnel@github:thirsty5034/dsh-ssh-tunnel"

安装完成后,需要重启 DSH Web 进程,并在浏览器中执行硬刷新(Ctrl+Shift+R 或 Cmd+Shift+R)以加载新的插件界面。

典型用法

模型通过调用 SSHManager 工具与远程主机交互。以下是标准的工具调用示例:

  • 列出所有主机:
    SSHManager action=list_hosts
  • 在指定主机执行命令:
    SSHManager action=exec host_id=<id> command="uname -a"
  • 通过 SFTP 列出目录:
    SSHManager action=sftp_list host_id=<id> path=/

会话策略:
在调用工具时,可以通过参数指定会话策略:
* reuse_or_create:默认策略,尝试复用已存在的会话,失败则新建。
* new:强制新建会话。
* require_existing:仅使用已存在的会话,不存在则报错。
* session_id:显式指定会话 ID。

数据与安全

插件的数据存储在 $DSH_HOME/ssh-tunnel/ 目录下(权限为 0700):

  • hosts.json:存储主机元数据。
  • secrets.json:存储密码、PEM 私钥或短语(权限 0600)。
  • grants.json:存储项目路径到主机 ID 列表的映射。
  • known_hosts.json:存储已验证的主机密钥指纹(SHA256 十六进制格式)。

安全限制:
* 认证方式:仅支持密码或私钥认证。键盘交互 认证已废弃,需编辑主机配置改用密码或私钥。不支持 Bastion Web MFA。
* 文件路径限制:本地上传/下载/列表操作限制在 /workspace 目录,且进行词法路径检查和 realpath 检查,拒绝符号链接。
* API 安全:HTTP API 仅监听本地回环地址,且依赖 trusted-hosts 配置。浏览器 Origin 必须与配置匹配,会话 API 必须提供 projectPathKey。
* 密钥轮换:如果怀疑 secrets.json 泄露,应立即轮换密钥。

注意事项

  1. 不替换全局文件系统:插件提供的是会话级和工具级的 SSH 访问,不会改变 DSH 的全局文件系统权限模型。
  2. 依赖环境:确保 DSH Web 配置了 dsh-better-sidebar (>= 0.12) 且 Node.js 版本为 18+。
  3. 会话保活:插件内置了 ssh2 keepalive 机制(30秒间隔),意外掉线后会自动尝试重连,最多重试 3 次。
  4. 前端依赖:终端依赖的 @xterm/xterm@5.5.0 和 @xterm/addon-fit@0.11.0 通过同源路由加载,无 CDN 回退机制。

总结

dsh-ssh-tunnel 为 DSH 生态提供了一套标准化的 SSH 管理方案,通过项目级授权和模型工具接口,解决了多主机远程操作的安全性和易用性痛点。开发者在配置好主机清单和密钥后,可直接在对话中使用 SSHManager 工具进行操作。

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

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

小夜