前言¶
在 DSH 裏做運維、部署或排查問題時,智能體往往只能操作本機環境。遠程機器上的日誌、服務狀態、構建命令,要麼你手動複製粘貼,要麼另開終端 SSH 進去再口述結果。DeepSeek Harness 的插件機制允許把「連哪臺機、怎麼執行命令」做成 Host 側服務與 Agent 工具;dsh-plugin-remote-ssh 走的就是這條路:用本機 OpenSSH 客戶端連遠端,並在 設置 → SSH 主機 裏維護主機清單,不存密碼與私鑰內容。
下面介紹該插件的定位、能力、安裝方式與使用時需要注意的安全邊界。
這是什麼¶
dsh-plugin-remote-ssh 是維護者 pelucoola 發佈的 DSH 客戶端類插件(當前 GitHub 星標爲 0)。一句話:讓 DSH 通過 SSH 控制遠程主機——智能體獲得 ssh / ssh_hosts 工具(連接複用、自適應超時),設置頁統一管理已保存主機(增刪改查、測試連接)。認證完全交給本機 ssh 客戶端(ssh-agent、~/.ssh/config 或條目裏指定的私鑰路徑);Host 與瀏覽器兩半都不 import 任何 @deepseek-ai/dsh-* 包,只依賴運行時 Cordis Context。
插件目錄頁:https://www.skillhub.cn/plugins/pelucoola/dsh-plugin-remote-ssh
源碼與說明:https://github.com/pelucoola/dsh-plugin-remote-ssh(MIT,package 版本 0.2.0)
核心功能¶
智能體工具¶
ssh:在已保存的主機上執行命令,支持cwd、stdin;返回exitCode/stdout/stderr。host可填主機 id 或名稱;host與command都省略時返回主機清單。ssh_hosts:對已保存主機做 List / Get / Add / Update / Remove / Test / Disconnect,與設置頁調用同一套sshHosts服務。
連接複用與超時¶
同一 DSH 進程內,對同一主機的多次調用複用一條後臺 OpenSSH ControlMaster 連接(首次握手,之後響應更快;空閒 sessionPersistSeconds 秒後自動回收)。Windows OpenSSH 不支持複用時插件會自動關閉該能力。
timeoutMs 是靜默超時:只要命令還有 stdout/stderr 輸出就會續命,長時間構建/部署不會被默認 60 秒誤殺;另有 maxTimeoutMs 硬上限兜底。返回值中的 timeoutKind(none / idle / total)和 sessionReused 說明本次結果來源。
設置界面¶
設置 → SSH 主機 支持新增 / 編輯 / 刪除 / 測試連接,字段包括用戶、端口、私鑰文件路徑、ProxyJump、備註。測試連接會執行 printf 'ok'; uname -srm 並顯示延遲與系統信息;刪除需點兩次(第二次爲「確認刪除」)。
持久化與實現要點¶
主機清單寫入 $DSH_HOME/ssh-hosts.json(權限 0600,原子寫)。複用連接的 socket 在 $DSH_HOME/ssh-masters/ 下按連接參數哈希命名。設置頁通過 /api RPC 調用 Host 側的 sshHosts,與 Agent 工具共用實現。
安裝與啓用¶
不需要 npm 賬號,從 GitHub 安裝(README 推薦方式):
dsh plugin --profile desktop add git+https://github.com/pelucoola/dsh-plugin-remote-ssh.git
也可在 DSH「插件 → 添加插件」裏粘貼同一 Git 地址。鎖定到某次提交時:
dsh plugin --profile desktop add git+https://github.com/pelucoola/dsh-plugin-remote-ssh.git#<40位commit>
Release 壓縮包見 https://github.com/pelucoola/dsh-plugin-remote-ssh/releases,可從本地路徑安裝。開發時可對倉庫絕對路徑執行:
dsh plugin --profile desktop add /絕對路徑/dsh-plugin-remote-ssh
本地目錄安裝會以 link: 寫進 profile;改 Host/Client 代碼後需重新 install_bundle 或重啓 DSH 纔會加載新模塊。
卸載時調用 plugin_manager / remove_bundle,target = dsh-plugin-remote-ssh;$DSH_HOME/ssh-hosts.json 不會被自動刪除。
配置¶
在 profile 的 cordis.patch.yml 裏覆蓋 bundle 行 id: ssh-hosts 的 config(未知鍵會導致掛載失敗,不會靜默忽略拼寫錯誤):
- id: ssh-hosts
name: dsh-plugin-remote-ssh
config:
sshBinary: ssh # 默認 ssh,走 PATH
connectTimeoutSec: 10 # 1-120
defaultTimeoutMs: 120000 # 靜默超時:多久沒有輸出就終止(1000-86400000)
maxTimeoutMs: 3600000 # 單次調用硬上限(60000-86400000)
maxOutputBytes: 200000 # 每個流截斷閾值,4096-8MiB
reuseSession: true # 複用後臺 SSH 連接
sessionPersistSeconds: 300 # 連接空閒多久後回收(0-86400)
典型用法¶
設置頁¶
- 打開
設置 → SSH 主機,「添加主機」填寫名稱與主機地址(必填),其餘可選。 - 使用「測試連接」確認可達性與延遲。
- 需要時在界面刪除條目(二次確認)。
智能體調用示例¶
列出或執行命令:
ssh(host: "prod-web", command: "systemctl status nginx", cwd: "/srv")
ssh() # 列出已保存主機
ssh_hosts(action: "add", name: "prod-web", host: "10.0.0.5", user: "root")
ssh_hosts(action: "test", id: "prod-web")
長任務與斷開復用連接:
ssh(host: "prod-web", command: "npm run build", timeoutMs: 600000)
ssh_hosts(action: "disconnect", id: "prod-web")
複用連接不保留遠端交互式 shell 狀態(例如單獨 cd);每次調用仍是獨立命令,工作目錄用 cwd 或寫進命令。
適用場景與注意¶
適合:已在 DSH Desktop 上使用智能體做遠程運維、部署、日誌與狀態檢查,且本機已配置好公鑰或 ssh-agent 的場景。
務必知曉:
- 插件以當前 DSH 進程權限運行;遠程命令能力等同於該 SSH 賬號在遠端擁有的權限。安裝前應閱讀源碼與 MIT 許可證,確認符合你的安全策略。
- 所有 ssh 調用固定
-o BatchMode=yes,不會彈出交互式密碼;需密碼登錄的主機請先配置公鑰(如ssh-copy-id)。新主機建議先在終端手動 ssh 一次或自行管理known_hosts。 - Agent 可調用
ssh_hosts修改主機清單。若不希望模型自行添加主機,可在 profile 裏停用插件或收緊工具權限。 - 社區目錄 skillhub.cn 是獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,本插件也可直接通過上述
dsh plugin add安裝。
倉庫內另有中文推廣文檔 docs/promo-zh.md(安裝、使用、/var 清理示例、安全設計),可作爲延伸閱讀。
結尾¶
dsh-plugin-remote-ssh 把「保存 SSH 主機」和「在 Agent 裏遠程執行命令」收進同一套 DSH 插件:設置頁與工具共享實現,連接複用與靜默超時針對真實運維任務做了約束。需要試用時,從 GitHub 安裝命令或目錄頁進入即可。