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
羽毛球分组比赛记分
小程序二维码

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

小夜