前言¶
在 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 時)¶
- 安裝依賴並構建客戶端:
pnpm install
pnpm run build
- 在
$DSH_PROFILE_DIR/package.json中加入依賴(先備份):
{ "dependencies": { "@local/dsh-ssh": "link:/absolute/path/to/dsh-ssh" } }
-
在 profile 目錄執行
pnpm install --ignore-scripts。 -
在
$DSH_PROFILE_DIR/cordis.patch.yml末尾加入:
- insert:
- id: ssh
name: '@local/dsh-ssh'
- 重新加載頁面(桌面版可重啓應用)。HMR 會重組配置並加載 Host 行。
手動編輯 profile 會寫入工作區之外的文件。請先備份
package.json、pnpm-lock.yaml與cordis.patch.yml。
典型用法¶
人工使用¶
- 點擊右下角 SSH 按鈕,或右側欄 + → SSH 終端,在右側欄打開 SSH。主對話仍在左側,可以直接繼續聊天。
- 在側欄頂部選擇連接,或點 + 新建連接;填寫主機、端口、用戶名與認證方式,先測試連接。
- 選中連接後點連接;點 + 終端打開交互式 Shell,或點文件管理 SFTP。
- 側欄可以收起(終端在 Host 側繼續運行)或拖寬/全屏;刷新頁面後仍存活的終端會自動恢復。
- 首次連接會記錄主機密鑰指紋;以後指紋變化會拒絕連接,需在編輯連接中顯式“忘記該密鑰”。
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