DeepSeek Harness SSH 插件

前言

在 DeepSeek Harness(DSH)里操作远程服务器时,通常会打开多个窗口或跳转到 SSH 客户端。频繁切换不仅打断对话流,也容易遗漏上下文。DSH SSH 插件把 SSH 终端和 SFTP 文件管理器直接嵌入到右侧栏,与主对话窗口并排显示,让聊天与运维可以同时进行。

插件定位

callay02/dsh-ssh 是一个社区维护的客户端插件,提供 SSH 终端、SFTP 文件管理和远程指标采集能力,支持多连接管理、交互式终端、Agent 工具集和主机密钥固定(TOFU)。包名 @local/dsh-ssh 是本地作用域,不发布到 npm。

核心功能

多连接管理

  • 支持名称、主机、端口、用户名配置。
  • 认证方式:密码、私钥、SSH Agent。
  • 连接状态、错误信息与主机密钥指纹可见。
  • 主机密钥首次连接固定,后续不匹配会拒绝连接。

右侧栏终端,对话不中断

  • SSH 终端作为右侧栏标签页打开,左侧主对话保持可用。
  • 侧栏收起后终端在 Host 进程继续运行,展开或刷新页面后自动恢复。
  • 基于 xterm.js 的交互式终端,支持颜色、Ctrl 组合键、窗口 resize、滚动缓冲。
  • 每个连接可开多个终端。
  • 终端上方实时显示连接状态、下载/上传速率、CPU 与内存占用。

侧栏入口

  • 右下角浮动 SSH 按钮。
  • 右侧栏 + → SSH 终端。
    • 终端 右侧带“文件”文字的文件夹按钮。

远程指标

  • 每约 2 秒采样远端 CPU、内存和网卡计数,换算成下行/上行速率。
  • 仅在终端可见时轮询。

Agent 远程控制

插件提供六个工具:

  • ssh_list:列出连接、状态、指纹。
  • ssh_connect / ssh_disconnect:预连接或断开。
  • ssh_exec:非交互执行命令,支持超时与伪终端。
  • ssh_files:SFTP 列目录。
  • ssh_upload / ssh_download:文件/目录上传下载,支持递归与取消。

约束:

  • Agent 的本地路径必须位于当前 Session 工作目录内。
  • Agent 不能创建连接或读取/修改凭据。
  • 目录传输默认跳过 .git 和 node_modules,单次最多 1000 个文件。

SFTP 文件管理

  • 目录浏览、上传(多选/拖拽)、下载、新建目录、重命名、删除。
  • 文件夹可一键打包为 .tar.gz 下载。
  • 上传/下载显示实时进度条与已传输大小,支持取消。
  • 文件夹打包下载在没有 Content-Length 时显示不确定进度。

安全边界

  • 主机密钥首次连接固定(TOFU)。
  • 浏览器 API 走 DSH 已认证的 /api 通道。
  • 连接凭据只保存在 Host 本地(0600),不回传给浏览器。
  • 凭据保存在 $DSH_HOME/ssh/connections.json,目录 0700、文件 0600。

中英双语

  • 跟随 DSH 的语言设置实时切换,无需刷新或改配置。

安装与启用

插件按本地 bundle 开发,包名 @local/dsh-ssh 仅本地作用域,不发布到 npm。

获取源码

git clone https://github.com/Callay02/dsh-ssh.git
cd dsh-ssh

方式 A:由 Agent 使用 plugin_manager 安装(推荐)

在 Creator 模式(或启用了 tool-plugin-manager 的 profile)中,对 Agent 说:

用 plugin_manager 的 install_bundle 安装这个本地目录:
/absolute/path/to/dsh-ssh

install_bundle 会完成 pnpm 安装与 bundle 选择。安装后刷新页面,即可在右下角看到 SSH 按钮,或在右侧栏 + 菜单中选择 SSH 终端。

方式 B:手动链接(无法使用 plugin_manager 时)

  1. 安装依赖并构建客户端:
pnpm install
pnpm run build
  1. 在 $DSH_PROFILE_DIR/package.json 中加入依赖(先备份):
{ "dependencies": { "@local/dsh-ssh": "link:/absolute/path/to/dsh-ssh" } }
  1. 在 profile 目录执行 pnpm install --ignore-scripts。

  2. 在 $DSH_PROFILE_DIR/cordis.patch.yml 末尾加入:

- insert:
    - id: ssh
      name: '@local/dsh-ssh'
  1. 重新加载页面(桌面版可重启应用)。HMR 会重组配置并加载 Host 行。

手动编辑 profile 会写入工作区之外的文件。请先备份 package.json、pnpm-lock.yaml 与 cordis.patch.yml。

典型用法

人工使用

  1. 点击右下角 SSH 按钮,或右侧栏 + → SSH 终端,在右侧栏打开 SSH。主对话仍在左侧,可以直接继续聊天。
  2. 在侧栏顶部选择连接,或点 + 新建连接;填写主机、端口、用户名与认证方式,先测试连接。
  3. 选中连接后点连接;点 + 终端打开交互式 Shell,或点文件管理 SFTP。
  4. 侧栏可以收起(终端在 Host 侧继续运行)或拖宽/全屏;刷新页面后仍存活的终端会自动恢复。
  5. 首次连接会记录主机密钥指纹;以后指纹变化会拒绝连接,需在编辑连接中显式“忘记该密钥”。

Agent 使用

工具在插件启用后自动注册。示例对话:

用 ssh_list 看看有哪些服务器;连上 web-1,执行 df -h 和 systemctl status nginx
把本地 dist/ 上传到 web-1 的 /var/www/app/,然后重启服务
把远程 /var/log/nginx/error.log 下载到工作区

配置

在 cordis.patch.yml 的 ssh 行上提供 config(全部可省略):

- id: ssh
  config:
    dataDir: ~/.dsh/ssh
    connectTimeoutMs: 20000
    execTimeoutMs: 120000
    maxOutputChars: 131072
    maxTerminalChars: 524288
    maxTerminals: 8
    keepaliveIntervalMs: 15000
字段 默认 说明
dataDir $DSH_HOME/ssh connections.json 所在目录
connectTimeoutMs 20000 SSH 握手超时
execTimeoutMs 120000 ssh_exec 默认超时
maxOutputChars 131072 单条命令每个输出流的上限
maxTerminalChars 524288 每个终端保留的滚动回看字符数
maxTerminals 8 同时存活的交互终端上限
keepaliveIntervalMs 15000 SSH keepalive 间隔

适用场景与注意

  • 适合需要同时进行对话与运维操作的场景,如调试服务、查看日志、上传部署包等。
  • 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
  • 终端传输使用长轮询(最长 8 秒一次挂起请求),不适合高帧率全屏程序。
  • Host 进程重启后终端与连接都会丢失;终端滚动缓冲不持久化。
  • 暂不支持端口转发、跳板机/ProxyJump、多跳、密钥生成与管理、sudo 密码交互。
  • 凭据未接入 macOS Keychain / Windows Credential Manager。
  • 删除非空远程目录需要先用其它方式清空(SFTP rmdir 语义)。

总结

DSH SSH 插件将 SSH 终端、SFTP 文件管理和远程指标采集集成到 DSH 右侧栏,让对话与运维在同一界面完成。多连接管理、交互式终端、Agent 工具集与主机密钥固定(TOFU)提供了完整的远程操作能力。

  • 目录页:https://www.skillhub.cn/plugins/Callay02/dsh-ssh
  • GitHub:https://github.com/Callay02/dsh-ssh
羽毛球分组比赛记分
小程序二维码

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

Xiaoye