dsh-remote-bash:在 DSH 對話裏安全執行遠程 SSH 命令

前言

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

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

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

小夜