前言¶
在 DeepSeek Harness(DSH)裏做運維或聯調時,模型往往需要在一臺或多臺 Linux / macOS 上跑命令。常見做法是自己在終端 SSH,再把輸出貼回對話,或者讓智能體在本機 shell 裏間接操作——前者打斷流程,後者又碰不到你內網裏的機器。Remote Bash 以插件形式把主機、憑據和 SSH 會話收進 DSH:在 Settings 裏登記主機,對話裏通過工具一次打一臺或整組機器,並帶上審批、主機指紋和 SFTP 等約束。下面按安裝、配置和用法說明它做什麼、怎麼用。
這是什麼¶
dsh-remote-bash(倉庫 wybiacx/dsh-remote-bash)是面向 DSH 的 SSH 命令插件,維護者爲 wybiacx,在社區目錄中歸類爲 聯網工具。它在個人配置的 cordis.patch.yml 裏註冊插件,並在 DSH Settings 中增加 Remote Bash 區塊(主機、已知主機、持久會話三個標籤頁)。
密碼、私鑰與 sudo 密碼寫入本地 DSH 憑據庫;模型側只能看到「是否已配置憑據」,看不到明文。連接採用主機密鑰 TOFU(首次記錄 SHA256 指紋,變更則拒絕並在 Settings 中待確認)。危險命令走審批;可選持久 shell 在同一會話裏保留 cd / export 狀態。文件傳輸走 SFTP(remote_upload / remote_download)。Host 側用純 JavaScript 的 ssh2 建連,不依賴本機 ssh 客戶端或 sshpass。
許可證爲 MIT(README 與 package.json 一致);package.json 中版本爲 1.0.0,要求 Node >= 20。
核心功能¶
Settings 與主機管理¶
每個主機行可測試連接、編輯憑據、查看已記錄指紋。主機與分組在 Settings 中維護;工具 remote_hosts 可列出主機、分組及憑據配置狀態(不返回密碼)。
五個 Host 工具¶
| 工具 | 用途 |
|---|---|
remote_bash |
在一臺或多臺主機上執行命令;支持 cwd、timeoutSec、session、sudo |
remote_hosts |
列出主機、分組與憑據狀態 |
remote_upload |
SFTP 上傳文件或目錄(可遞歸) |
remote_download |
SFTP 下載;多主機時文件名會帶 <name>- 前綴或 <name>/ 目錄 |
remote_sessions |
列出或關閉持久會話 |
remote_bash 需傳 description:一行說明命令用途,用於審批對話框與工具卡片;完整命令仍進入審計記錄。
安全與審批¶
- approvalMode(默認
dangerous):僅當命中內置危險規則(含sudo)或extraDangerousPatterns時請求審批;可選always(每條命令都問)或trusted(不詢問)。 - 審批服務不可用時,命令會被拒絕。
- 持久會話爲同一 SSH 通道上的
bash -s(無 PTY),適合cd/export;不適合 vim、top 等全屏 TTY 程序。
插件不向除你所配置主機以外的地址發起網絡請求,也不單獨採集數據。安全報告方式見倉庫中的 SECURITY.en.md。
安裝與啓用¶
需要 DSH 0.2.x(README 寫明在 0.2.1-rc.3 上測試)和 Node 20+。安裝時 npm 會拉取依賴 ssh2。
在 DSH 內從 GitHub 安裝(會請求一次批准):
plugin_manager({
action: 'install_bundle',
target: 'git+https://github.com/wybiacx/dsh-remote-bash.git'
})
生產環境可固定 commit,避免上游直接變動:
plugin_manager({
action: 'install_bundle',
target: 'git+https://github.com/wybiacx/dsh-remote-bash.git#<commit>'
})
本地開發可指向 checkout 絕對路徑:
plugin_manager({ action: 'install_bundle', target: '/absolute/path/to/dsh-remote-bash' })
首次安裝後刷新瀏覽器一次,Settings 中會出現 Remote Bash。若使用 link: 類安裝,需在插件列表中關開一次插件行(或重啓 DSH)以加載 Host 側變更。
配置¶
配置寫在 profile 的 cordis.patch.yml 中(插件 patch 會插入如下結構,可按需改值):
- insert:
- id: remote-bash
name: 'dsh-remote-bash'
config:
dataDir: '' # default: <DSH_HOME>/remote-bash
defaultTimeoutSec: 60 # per-host command timeout
maxParallelHosts: 8 # concurrent hosts
maxOutputBytes: 32768 # per-host output cap
sessionIdleMinutes: 30 # idle timeout for persistent sessions
approvalMode: dangerous # dangerous | always | trusted
extraDangerousPatterns: [] # additional danger regexes (strings)
| approvalMode | 行爲 |
|---|---|
dangerous(默認) |
僅危險規則匹配時詢問(含 sudo) |
always |
每條遠程命令都詢問 |
trusted |
不詢問,直接執行 |
典型用法¶
對話中可以自然語言描述目標,由智能體調用工具。README 中的示例形態如下:
> check disk usage on web-1
remote_bash({ targets: 'web-1', command: 'df -h /', description: 'check root filesystem usage' })
常見參數組合:
| 目標 | 參數 |
|---|---|
| 組內全部主機 | targets: '@web' |
| 指定多臺 | targets: 'web-1, db-1'(名稱或 id) |
| 指定工作目錄 | cwd: '/opt/app' |
| 持久會話 | session: 'deploy',同名會話跨調用複用 |
| 需要 root | sudo: true(用主機 sudo 密碼,否則回退登錄密碼) |
| 傳文件 | remote_upload / remote_download,路徑模板可用 {host}、{name} |
命令默認 stdin 爲空;需要輸入時用管道或重定向。取消或超時正在執行的會話命令會關閉該會話,之後可新建;排隊中的調用取消不會影響其他正在執行的調用。
適用場景與注意¶
適合已在 DSH 裏做智能體開發、需要在已登記的遠程 Linux / macOS 上批量或重複執行命令、偶爾 SFTP 傳文件的開發者或運維。不適合替代完整交互式 SSH 終端(無 PTY、無 SSH agent 轉發)。
安裝前建議閱讀倉庫源碼與 MIT 許可證,並理解權限邊界:憑據以文件模式 0600 存在 DSH 憑據庫中,與 DSH 憑據庫相同,同一 OS 用戶下的其他進程(含智能體本機 shell 工具)在原則上可讀該文件,這是文件權限層面的限制,插件無法在 Host 內進一步隔離。遠程命令與輸出會進入當前 DSH 會話記錄,勿在命令中攜帶密鑰等祕密。
結尾¶
dsh-remote-bash 把遠程 SSH 執行、分組、審批、主機指紋和 SFTP 收進 DSH 插件模型:Settings 管主機與憑據,對話裏用五個工具完成執行與傳文件。社區目錄頁:https://www.skillhub.cn/plugins/wybiacx/dsh-remote-bash;源碼與完整說明:https://github.com/wybiacx/dsh-remote-bash。