UniTerminal:在 DSH 右欄裏完成 SSH、SFTP 與端口轉發

前言

在 DSH 裏做遠程運維時,常見做法是另開系統終端或獨立 SSH 客戶端:窗口和 IDE 分離,AI 側也很難直接利用你已經連上的會話。若希望主機列表、交互式終端、文件傳輸和本地/遠程隧道都收在 DSH 界面裏,並且「記住密碼」交給操作系統憑據庫而不是插件自造加密,社區插件 UniTerminal(npm 包 @winking-r/dsh-uniterminal,維護者 WinKing-R)就是面向這一組合需求的客戶端類插件。下面介紹它的定位、能力與安裝方式;事實以 GitHub 倉庫 README 爲準。

這是什麼

UniTerminal 掛在 DSH 右側欄:一個側邊欄標籤裏可以並存多條會話(頂部會話欄切換;同一主機連兩次會顯示 #2)。每條會話並列提供 終端(xterm + shell)、文件(SFTP)和 隧道(-L / -R / -D)三視圖。

插件自述:密碼交給操作系統密碼箱保管(Windows 憑據管理器、macOS 鑰匙串、Linux Secret Service),自身不實現任何加密;僅當本機沒有可用系統密碼箱時纔回落明文文件,並在界面上說明。當前 README 標註版本 0.2.19,許可證 MIT;運行環境要求 DSH >=0.2.1-rc.2、Node >=20。

社區目錄頁:skillhub.cn/plugins/WinKing-R/dsh-uniterminal。DSH 生態是「一切皆插件」;該目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

核心功能

主機與會話

  • 主機:添加 / 編輯 / 刪除(二次確認)、分組;可從 ~/.ssh/config 只讀導入(不回寫);連接前可「測試」連通性;孤兒會話可接管或關閉(接管無需重新輸入密碼)。
  • 狀態:行內狀態芯片顯示延遲;成功結果 5 分鐘後變暗、30 分鐘後回到「未測試」;失敗保留到下次測試;支持「測試全部」(≤3 併發)與巡檢抽屜(依賴遠端 Linux 的 /proc、df 等,缺字段則少顯示、不阻斷連接)。
  • 認證:密碼、私鑰(路徑或粘貼)可同時啓用;勾選「記住密碼」並保存配置即寫入憑據庫,不必先連一次;支持跳板鏈 ProxyJump(各跳暫用同一套憑據)。

終端、文件與隧道

  • 終端:xterm.js,自適應尺寸,斷線重連;面板重掛載或頁面刷新後,會話與輸出通過 sessionStorage 存檔儘量不丟。
  • 文件:SFTP 瀏覽、多選上傳(進度與取消)、下載、新建目錄、刪除。
  • 隧道:本地轉發、遠程轉發、SOCKS5;監聽 127.0.0.1;隨會話關閉自動回收(README 說明 -R 停止時遠端端口可能不會立刻釋放,需等會話關閉)。

AI 可調用工具

註冊 uniterminal_list_sessions(發現會話)與 uniterminal_exec(在已有會話裏執行命令並取 stdout / 退出碼)。默認 mode=exec(獨立通道,不佔用用戶正在看的終端);mode=shell 會把命令打進用戶終端並留在屏幕上。AI 不能自行建連或提交憑據,只能操作你已打開的會話。不需要時可在插件設置把 agentExec 設爲 off。

右欄承載方式

插件雙註冊並運行時探測:若安裝了 DSH-better-sidebar 則優先註冊到 betterSidebar;否則回落官方 @deepseek-ai/dsh-client-ui-sidebar-right 的 sidebarRightTabs。沒有 better-sidebar 也能用。

安裝與啓用

前提:DSH >=0.2.1-rc.2、Node >=20。

一條命令(推薦)

DSH CLI 會完成裝包並在 profile 中登記:

dsh plugin --profile desktop add @winking-r/dsh-uniterminal@latest

--profile 換成你 ~/.dsh/profiles/ 下實際目錄名(常見 desktop 或 web)。裝完重啓 DSH,右欄應出現 UniTerminal 標籤。

README 註明:安裝過程若退出碼爲 1 且打印 Ignored build scripts: cpu-features, ssh2,可能是預期現象——包可能已裝好,但自動登記被打斷;需確認 dsh.profile.bundles 含 @winking-r/dsh-uniterminal,否則按倉庫「故障排查」手動追加。改動宿主代碼後須重啓 DSH(硬刷新頁面不夠)。

手動等價步驟

cd ~/.dsh/profiles/desktop
pnpm add @winking-r/dsh-uniterminal

在對應 package.json 的 dsh.profile.bundles 數組追加:

"@winking-r/dsh-uniterminal"

重啓 DSH;若右欄未自動出現,用右欄 + 手動添加 UniTerminal 標籤。

裝完自檢(README 建議)

檢查 做法 期望
宿主服務 請求 http://127.0.0.1:<DSH 端口>/api/uniterminal/health {"ok":true}
AI 工具 查 ~/.dsh/uniterminal/diag.log 的 agent-tools.registered 含 uniterminal_list_sessions、uniterminal_exec
憑據存儲 ~/.dsh/uniterminal/security.json 的 storage 有密碼箱時爲 keychain 且 degraded 爲 false

卸載:先從 dsh.profile.bundles 移除包名,再在 profile 目錄 pnpm remove @winking-r/dsh-uniterminal,重啓 DSH。主機檔案與憑據默認留在 ~/.dsh/uniterminal/。

典型用法

  1. 在 UniTerminal 標籤中維護主機(或從 ~/.ssh/config 導入),必要時行內「測試」再「連接」。
  2. 連接後在同一會話切換 終端 / 文件 / 隧道;同一標籤可開多條會話,用頂部欄切換。
  3. 需要 AI 在遠端執行只讀或腳本類命令時,保持會話已連接,由 DSH 內 AI 調用 uniterminal_exec(默認 exec 模式不污染你的交互終端)。

插件設置(節選,見 README 配置表):

鍵 默認 說明
knownHostsPolicy reject 未知指紋:reject 需顯式信任 / trust 自動信任並落盤
connectTimeoutMs 20000 連接超時(毫秒)
agentExec on 關閉則不再註冊 exec 工具且相關 API 403
term xterm-256color TERM 類型

用戶數據目錄 ~/.dsh/uniterminal/:profiles.json 存主機與分組(不含密碼);記住的口令在有密碼箱時進系統庫;無密碼箱時可能出現高敏感性的 credentials.json。安全細節見倉庫 docs/SECURITY.md。

適用場景與注意

適合:已在用 DSH 做開發與智能體協作、希望 SSH / SFTP / 端口轉發與右欄 UI 一體、並願意把「記住密碼」交給 OS 憑據庫的用戶。

務必知曉:

  • 插件以當前 DSH 進程權限運行;安裝與啓用前請自行查看源碼與 MIT 許可證,評估主機與憑據風險。
  • 不提供終端鎖屏;離開座位時已連接會話無額外保護,需自行鎖屏或斷開。
  • 無系統密碼箱或多用戶共用機器時,不要依賴「記住密碼」的明文回落方案。
  • README 列出的限制還包括:跳板鏈各跳同一憑據、shell 模式拒絕部分交互式/全屏程序、SFTP 覆蓋式上傳在個別服務器上的極短窗口等——上線前建議通讀 README「已知限制」一節。

結尾

UniTerminal 把 SSH 終端、SFTP 與本地/遠程/SOCKS 隧道收進 DSH 右欄,並可選地向 AI 暴露已有會話上的 exec 能力;憑據策略明確依賴操作系統密碼箱而非插件內加密。進一步瞭解與 issue 反饋:

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

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

小夜