前言¶
在 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/。
典型用法¶
- 在 UniTerminal 標籤中維護主機(或從
~/.ssh/config導入),必要時行內「測試」再「連接」。 - 連接後在同一會話切換 終端 / 文件 / 隧道;同一標籤可開多條會話,用頂部欄切換。
- 需要 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 反饋: