dsh-plugin-remote-ssh:讓 DSH 通過 SSH 控制遠程主機

前言

在 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)

典型用法

設置頁

  1. 打開 設置 → SSH 主機,「添加主機」填寫名稱與主機地址(必填),其餘可選。
  2. 使用「測試連接」確認可達性與延遲。
  3. 需要時在界面刪除條目(二次確認)。

智能體調用示例

列出或執行命令:

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 安裝命令或目錄頁進入即可。

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

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

小夜