dsh-remote:在 DSH 裏用 SSH 管理遠程工作區

前言

DeepSeek Harness(DSH)默認把 Web UI 綁在 127.0.0.1,CLI 也拒絕 --host 0.0.0.0,這是有意爲之的安全設計。實際開發裏,代碼和構建環境往往在另一臺機器上:雲主機、內網服務器,或者一臺 Windows 開發機。常見做法是 SSH 登錄後手工同步文件,或在本地再開一套編輯器,智能體無法直接操作遠端目錄。

下面介紹 dsh-remoteflymysql/dsh-remote):由社區維護者 flymysql 發佈的 DSH 聯網工具插件。它讓你從本機 DSH 主動連出去,選一臺 SSH 主機和遠端目錄,通過 rw_* 工具在遠端讀寫、執行命令,並把目錄鏡像到本地真實工作區,走 DSH 原有的 workspace 與 agent 文件流,無需改動 dsh-workspace 或 harness 核心。

這是什麼

dsh-remote 是 DeepSeek Harness 的遠程工作助手插件,分類爲聯網工具。一句話定位:管理多臺 SSH 主機,選定遠程(或本地)工作區,讓智能體在遠端目錄上直接操作,同時用 SFTP 把遠端目錄鏡像成本地 DSH 工作區。

多機 SSH 與工作區選擇

多機註冊與連接

Settings 面板提供「遠程工作區」入口,可保存任意數量的 SSH 主機(host / port / user,私鑰或密碼)。密碼僅存本地,UI 不回顯。每臺機器可單獨配置:

  • passphrase、host-key 模式、SSH agent
  • keyboard-interactive(OTP)
  • 代理跳轉(bastion)
  • 可選 OS 鑰匙串加密保存密碼(macOS Keychain / Windows DPAPI / Linux secret-tool

支持從 ~/.ssh/config 導入 Host 別名(只引用路徑,不讀取密鑰內容)。保存前可用「測試連接」校驗,並按認證、網絡、host key、超時等類別給出錯誤提示。

雙標籤工作區選擇器

插件填充 DSH 原生的「添加工作區 / 選擇工作區」流程,彈出居中模態框,兩個標籤頁:

本機(Local) — 調用系統文件夾選擇器(macOS osascript、Linux zenitykdialog、Windows FolderBrowserDialog),或直接輸入本地路徑,作爲普通 DSH 本地工作區。

遠程(Remote) — 先選機器,路徑框預填 / 並即時補全目錄(選中一級立即列出下一級,類似 OS/VSCode 體驗)。「瀏覽…」浮層展示 size 與 mtime,目錄優先、跟隨符號鏈接,填入路徑但不立即提交,確認後點「設爲遠程工作區」。還提供最近工作區、~ 主目錄快捷和「新建目錄」。

確認遠程工作區後,插件在本地創建真實鏡像目錄:

$DSH_HOME/remote-workspaces/<host>-<user>-<port>/<base>

fs.realpath 後由 harness 採納爲正式工作區,dsh-remote 通過 SFTP 保持同步。

核心能力

雙向 SFTP 同步

rw_sync(遠端 → 鏡像)和 rw_push(鏡像 → 遠端)採用三方比對(遠端、本地、上次同步快照)。兩側都改過的文件會報告衝突,不會靜默覆蓋;force=true 可強制覆蓋。兩者均支持 dry-run、後臺任務,並遵守 gitignore 風格忽略規則(remote-workspaces 下的 .dsh-remote-ignore,默認忽略 .gitnode_modulestargetdistbuild 等)。

20 個 rw_* 模型工具

全部基於 SFTP,Windows 與 POSIX 遠端均可使用:

工具 作用
rw_info 查看當前連接與工作區信息
rw_connect 建立 SSH 連接(可 save 保存配置)
rw_pick_workspace 選擇遠程工作區
rw_list_dir 列目錄(含 size、mtime)
rw_stat 文件元信息
rw_read_file 讀文件(支持 utf-8 / gbk 編碼)
rw_write_file 寫文件
rw_edit 字面量替換編輯,帶 mtime 樂觀鎖
rw_append 追加內容
rw_mkdir 建目錄
rw_remove 刪除(遞歸,有界)
rw_move 移動/重命名
rw_exec 遠端執行命令(支持 pty / env)
rw_search SFTP 樹遍歷搜索(含上下文行,遵守忽略規則)
rw_download / rw_upload 流式傳輸(fastGet/fastPut,有大小上限)
rw_forward SSH 端口轉發
rw_sync / rw_push 同步與推送
rw_disconnect 斷開連接

rw_sync / rw_pushasync: true 時返回 taskId,通過 /dsh-remote/task 查詢進度、結果或取消(單飛隊列)。

端口轉發

Settings 頁面或 rw_forward 可創建、啓動、停止、刪除本地轉發(127.0.0.1:port → remote)與反向轉發(remote → local)。定義持久化,重連時可自動重啓,斷開時全部停止。

側欄遠程編輯

自 v0.7.2 起,dsh-better-sidebar 爲硬依賴並自動掛載。側欄遠程文件標籤頁支持點擊「編輯」→ 修改 →「保存到遠程」,帶 mtime 樂觀鎖(併發修改返回 409,提示「重新讀取」)。資源管理器行顯示文件大小,右鍵菜單支持下載到本地鏡像、重命名、刪除、新建目錄。

安全與審計

  • Host-key 驗證(TOFU):默認 hostKeyMode: accept-new,首次連接記錄 host key,後續變更拒絕(防中間人)。verify 拒絕從未見過的主機;off 關閉驗證。記錄存於 $DSH_HOME/remote-workspaces/known_hosts.json,可用 /remote forget-key 重置。
  • 命令審計日誌:每次 rw_exec、寫、刪、移動、轉發操作追加到 $DSH_HOME/remote-workspaces/audit.log(時間 · user@host · 操作 · 退出碼 · 命令);Settings 展示最近 30 條。
  • 當前活躍的 user@host:/path 以及活躍轉發會注入系統提示詞。

跨平臺與數據位置

所有文件訪問在 SFTP 協議層完成,不依賴遠端 shell,因此 Linux、macOS、Windows 遠端在列目錄、讀寫、搜索、同步上行爲一致。機器配置與鏡像目錄均在 $DSH_HOME 下;0.6 之前的數據在 ~/.dsh/remote-workspaces,首次運行會自動遷移。

安裝與啓用

社區目錄與 README 給出的安裝命令一致:

dsh plugin add dsh-remote

一條命令安裝完整 bundle。自 v0.7.2 起側欄組件 dsh-better-sidebar 隨包掛載,無需額外步驟;若已單獨安裝側欄,內嵌副本會自動退讓,不與獨立 bundle 重複掛載(v0.8.7+ 起順序無關,早期版本若獨立側欄排在 dsh-remote 之後可能因重複路由 /sidebar/api 導致啓動失敗)。

環境要求:profile 的 pnpm linker 須爲 hoisted(DSH profile 默認值,即 pnpm-workspace.yamlnodeLinker: hoisted)。

典型用法

1. 添加插件並配置主機

dsh plugin add dsh-remote

啓動 DSH 後,打開 Settings →「遠程工作區」,添加 SSH 主機(密鑰或密碼),點「測試連接」確認可達,設爲當前機器。

2. 選擇遠程工作區

在 DSH 原生「添加工作區」流程中,切到「遠程」標籤:選機器 → 瀏覽或輸入遠端路徑 →「設爲遠程工作區」。本地鏡像創建完成後,工作區即被 harness 採納。

3. 讓智能體操作遠端

連接建立後,智能體可通過 rw_* 工具在遠端讀寫文件、執行構建命令。例如同步遠端變更到本地鏡像:

rw_sync

將本地鏡像推回遠端(衝突時先查看報告,必要時 force=true):

rw_push

需要訪問遠端內網服務時,在 Settings 或工具裏配置 rw_forward 本地端口轉發。

4. 側欄直接編輯

在 better-sidebar 的遠程文件標籤頁打開文件,編輯後「保存到遠程」;若遠端已被他人修改,按提示重新讀取再保存。

適用場景與注意

適合誰

  • 日常在 DSH 裏驅動智能體,但代碼、構建、測試環境在遠程 SSH 主機上的開發者
  • 需要同時管理多臺機器(雲服務器、跳板機後的內網主機、Windows 遠程桌面替代方案)的場景
  • 希望在單一 harness 界面完成遠端文件瀏覽、編輯、命令執行與目錄同步,而不改 harness 核心的用戶

使用前注意

  1. 權限邊界:插件以當前 DSH 進程權限運行,可讀寫你配置的 SSH 憑據、本地鏡像目錄並執行遠端命令。安裝前應閱讀 源碼 與 MIT 許可證,確認符合你的安全策略。
  2. 密碼與密鑰:密碼存本地(可選 OS 鑰匙串加密),私鑰路徑由你指定;插件不從 ~/.ssh/config 讀取密鑰內容,但連接時會使用你填寫的路徑。
  3. 同步衝突:默認不靜默覆蓋雙側修改;推送前留意 rw_sync / rw_push 的衝突報告。
  4. 側欄版本:若從 ≤0.8.6 升級且單獨安裝了 dsh-better-sidebar,v0.8.7+ 已修復 bundle 順序導致的重複路由問題;也可移除獨立側欄,改用內嵌副本。

結尾

dsh-remote 把「出站 SSH + 遠程工作區 + 本地鏡像」封裝進 DSH 插件模型:不改 harness 核心,用 SFTP 統一跨平臺文件訪問,用三方同步避免靜默覆蓋,用審計日誌和 host-key TOFU 補上基本可追溯與安全校驗。若你的開發環境在遠端,值得把它列入 DSH 聯網工具清單。

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

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

小夜