本地電腦一進入睡眠,OpenHands 長任務就中斷,重新連線後還要猜測工作目錄與執行狀態。
最快解法:把 OpenHands Agent Canvas 部署到獨立、可重建的遠端 VM,先用 SSH 隧道或私網驗收,再補上 API Key、TLS、進程保活與沙盒隔離;只有需要 Xcode 或其他 macOS 工具鏈時,才增加遠端 Mac。
這篇適合三類讀者:經常因筆記本休眠而失去長任務的獨立開發者、要替團隊提供共享 Agent 後端的平台與 DevOps 工程師,以及準備處理 macOS、Xcode 或跨平台建構工作的研發負責人。
最後更新於 2026 年 8 月 14 日;本文命令、架構與可公開存取方式已核對 OpenHands 官方自托管指南、官方 README 與 Agent Canvas 儲存庫。
先把執行邊界放對位置
OpenHands Agent Canvas 的前端不是執行 Agent 動作的地方。官方架構中,Canvas 負責介面、工作階段狀態與後端切換;真正讀寫檔案、執行 Shell 指令和連接網路的是 Agent Server。Automation backend 則處理排程或事件觸發的自動化工作。(github.com)
因此,你的主機至少可能承擔三種不同邊界:
- 控制服務:提供 Canvas 介面、Agent Server 與自動化服務。
- 程式建構環境:讓 Agent 讀取倉庫、安裝相依套件、執行測試與編譯。
- 外部沙盒連線點:把高風險或不可信任的工作交給 Docker 沙盒或其他隔離環境。
個人開發機把三者混在一起,隱性成本不只是休眠中斷,還包括未提交檔案遺失、SSH 工作階段依賴、個人憑證被 Agent 讀取,以及不同專案共用同一個環境。獨立 VM 的優勢是可以重建、限縮權限、單獨備份,而且不會因你合上螢幕而停止。
一般 Linux 程式碼分析、Web 服務測試、後端建構,優先放在 Linux VM。Xcode、Apple SDK、模擬器、簽名和 macOS 原生測試,才應規劃遠端 Mac 節點。
第一階段只在私網跑通最小服務
官方自托管路徑使用 Node.js 與 uv 啟動完整堆疊。官方 README 目前列出的前置條件是 Node.js 22.12.x 或更新版本,以及 uv;Ubuntu 範例則先安裝 curl 和 git。(github.com)
在乾淨 VM 上,先完成以下步驟:
- 更新系統套件,安裝
curl、git、Node.js 和uv。 - 以 SSH 登入,確認專案所在目錄與執行帳戶不是管理員帳戶。
- 產生獨立 API Key:
export LOCAL_BACKEND_API_KEY=$(openssl rand -base64 32)
- 啟動公開模式:
npx @openhands/agent-canvas --public
- 不要立即開放公網,先建立 SSH 隧道:
ssh -N -L 8000:127.0.0.1:8000 user@your-vm
完成後在本機瀏覽器開啟 http://localhost:8000,先驗證四項證據:
- Canvas 介面可以載入;
- Agent Server 顯示在線;
- 指定倉庫可以讀取;
- 提交一個短任務後,事件、輸出和狀態能持續返回。
官方自托管架構會以本機的 ingress proxy 統一轉發前端、Agent Server 和 automation backend;文件列出的內部服務連接埠包括 8000、18000、18001 和 3001。這些不是你應直接暴露到公網的連接埠。(github.com)
用配置對比決定隔離程度
你不應只問「能否啟動」,而要先判斷 Agent 是否會接觸敏感資料。官方也明確提醒:直接執行時,Agent 能夠存取主機檔案系統、環境和網路;Docker 沙盒則把可存取範圍收窄到你掛載的專案目錄。(github.com)
| 部署方案 | 適合場景 | 主要優點 | 主要風險 | SSHMac 評分 |
|---|---|---|---|---|
| VM 直接執行 | 信任的個人專案、隔離的專用主機 | 啟動路徑短,除錯直接 | Agent 可觸及主機檔案、環境變數與網路 | 3.5/5 |
| VM + Docker 沙盒 | 團隊共用、第三方倉庫、探索性任務 | 專案目錄與主機邊界較清楚 | 容器掛載、Docker 權限與檔案擁有者仍需管理 | 4.5/5 |
| 遠端 Mac | Xcode、模擬器、簽名和 macOS 原生建構 | 擁有真正的 macOS 工具鏈 | 成本、更新、重啟和實體資源管理較複雜 | 4/5 |
| 個人開發機 | 短時間本地試用 | 不用準備新主機 | 休眠、個人憑證、未提交檔案與執行環境互相影響 | 2/5 |
表格中的評分是部署決策評估,不是官方效能測試;真正的風險取決於你掛載的目錄、可用憑證、網路規則及 Agent 所執行的任務。
首次任務完成後再做權限加固
第一次任務不要使用正式專案的全部權限。建立一個專用工作目錄,只把必要倉庫放入其中,並分開處理以下資料:
- LLM 或第三方服務的 API Key;
- Git 認證與 SSH 私鑰;
- 雲端供應商憑證;
- 內部網路連線資訊;
.env、部署密鑰及正式環境設定。
LOCAL_BACKEND_API_KEY 應只存在服務環境或受限權限的設定檔,不要寫入公開倉庫、前端靜態檔案、Shell 歷史或一般使用者可讀的除錯日誌。啟用 --public 後,使用者需要在介面輸入金鑰,API 呼叫則會帶上相應的工作階段標頭;這是入口保護,不代表 Agent 已經完成沙盒隔離。(github.com)
接著做三組負面測試:
- 讓 Agent 嘗試讀取工作目錄以外的檔案,確認是否被拒絕。
- 使用錯誤 API Key 發送未授權請求,確認不會取得工作階段資料。
- 讓 Agent 執行刪除、安裝或網路探測類指令,確認主機權限、容器邊界和日誌都有可追溯結果。
如果你使用 Docker 沙盒,仍要審查 PROJECTS_PATH 的掛載範圍。掛載整個家目錄會抵銷隔離價值;只掛載必要專案,並讓工作目錄與服務帳戶的檔案擁有者一致。
公網接入要同時完成 TLS 與保活
私網驗收通過後,才進入公開存取階段。官方指南的公開模式是由 nginx 接收 HTTPS,再轉發到主機本機的 ingress proxy;因此對外通常只需要讓反向代理處理 HTTPS,而不是直接公開 Agent Server 或 automation backend。(github.com)
上线前按以下順序處理:
- 把網域解析到 VM,確認 DNS 已指向正確主機。
- 防火牆只允許你的管理來源連入 SSH。
- 由反向代理接收 443;若使用自動憑證流程,再按需要處理 80。
- 將代理流量轉發到
127.0.0.1:8000。 - 啟用長連線轉發,避免即時事件或 Socket 連線被代理提早切斷。
- 確認
LOCAL_BACKEND_API_KEY不會出現在代理存取日誌。 - 設定 systemd、容器重啟策略或其他進程管理工具。
短期測試可以用 tmux:
tmux new-session -d -s canvas \
'npx @openhands/agent-canvas --public'
長期服務則可使用 systemd,核心設定至少包含開機啟動、失敗後重啟及重啟間隔:
[Service]
Environment=LOCAL_BACKEND_API_KEY=請填入受限權限的金鑰
ExecStart=npx @openhands/agent-canvas --public
Restart=on-failure
RestartSec=5
驗收不應只看首頁能否開啟,還要測試即時事件連線、服務日誌輪轉、SSH 斷開後任務是否繼續、VM 重啟後服務是否自動恢復,以及 TLS 憑證續期是否成功。
把遠端後端加入本地 Canvas
如果你仍想在本地使用介面,可以把 VM 註冊成額外後端。官方流程是在本地 Canvas 的後端管理介面新增主機名稱、遠端 URL 和 Session API Key;若走 SSH 隧道,主機 URL 可指向本機的 http://localhost:8000,若已配置反向代理,則使用 HTTPS 網域。(github.com)
切換後,請用一個測試倉庫核對:
- 工作目錄是否位於遠端 VM,而不是本地路徑;
- Agent 設定和模型配置是否屬於正確後端;
- 任務記錄是否寫入預期環境;
- Git 分支、未提交檔案和相依套件是否一致。
後端切換不等於自動同步本地未提交程式碼。你需要先提交並推送 Git,或採用明確的檔案傳輸流程;否則你在本機看見的檔案,遠端 Agent 根本不一定讀得到。
如需進一步處理共享環境,可先參考 SSHMac 的幫助中心,再按團隊的連線與權限規範調整部署方式。
FAQ:部署前後最容易卡住的判斷
Agent Canvas 可以放在雲端伺服器嗎?
可以,但「可安裝」和「適合直接公開」是兩回事。雲端 VM 適合作為長期執行的 Agent Server,前提是先限制防火牆、只在本機綁定內部服務,再透過 SSH 隧道或 TLS 反向代理提供入口。首次測試不應跳過私網階段。
怎樣避免 SSH 斷線後任務停止?
SSH 只應是管理通道,不應是服務生命週期。tmux 適合快速驗證,正式環境應改用 systemd 或等效進程管理工具,並以 Restart=on-failure、開機啟動和日誌檢查確保服務恢復。最後要實際斷開 SSH,再觀察任務事件是否仍然返回。
Agent Server 要開哪些連接埠?
初次驗收只開受限來源的 SSH。Agent Canvas 官方自托管架構把內部服務放在本機連接埠,包含 ingress、Agent Server、automation backend 和靜態前端;正式公開時,應由反向代理接收 HTTPS,而不是把這些內部連接埠全部加入雲端防火牆。
甚麼工作才需要遠端 Mac?
只要建構流程需要 Xcode、Apple SDK、iOS 模擬器、簽名或 macOS 原生命令列工具,就應考慮遠端 Mac。單純的 Python、Node.js、Java、Go、Web 測試與一般後端工作,通常留在 Linux VM 更容易做版本固定、權限隔離和故障重建。
公網開放 Agent Canvas 的最低安全線是甚麼?
最低安全線包括獨立 API Key、public mode、網路防火牆、HTTPS、反向代理、受限工作目錄和可追溯日誌。若 Agent 能直接接觸正式憑證或整台主機,單靠登入頁並不足夠;你應改用 Docker 沙盒、專用帳戶或完全隔離的建構節點。
上線前用清單完成閉環驗收
以下清單要逐項勾選;未完成的項目不要直接進入團隊共用或正式倉庫:
- [ ] VM 可由你重建,且沒有依賴個人筆記本的本地檔案。
- [ ] 防火牆只允許受限 SSH、VPN 或必要的 HTTPS 來源。
- [ ]
LOCAL_BACKEND_API_KEY已獨立產生,未出現在公開檔案、前端或日誌。 - [ ] 首輪啟動已透過 SSH 隧道或私網完成。
- [ ] Canvas、Agent Server、倉庫讀取與任務事件均已驗證。
- [ ] Agent 只能存取指定工作目錄和必要環境變數。
- [ ] 已完成越權讀取、錯誤金鑰和危險命令測試。
- [ ] 反向代理已啟用 HTTPS,並正確轉發長連線。
- [ ] SSH 斷開後,任務仍能繼續執行。
- [ ] VM 重啟後,Agent Canvas 能自動恢復。
- [ ] 日誌輪轉、憑證續期和服務健康檢查已有負責人。
- [ ] 本地、遠端 VM 與專用建構節點的倉庫同步流程已寫清楚。
- [ ] 已用實際倉庫完成一次重啟恢復、並行任務與建構閉環。
- [ ] 只有在需要 Xcode 或 macOS 工具鏈時,才把任務路由到遠端 Mac。
目前方案與遠端 Mac 的取捨
如果你目前把 Agent Canvas 跑在個人電腦上,最明顯的問題是休眠會中斷長任務、個人憑證與 Agent 權限容易混在一起,而且同一台機器難以穩定承擔團隊共享工作。Linux VM 能先解決持續運行、重建和權限分層;但它無法取代 Xcode、Apple SDK、模擬器和 macOS 簽名環境。
因此,較合理的路線不是一開始就為所有任務配置 Mac,而是先完成最小 VM 部署,再按實際倉庫的工具鏈判斷。若你只需要遠端執行一般開發工作,Linux VM 已足夠;若你需要可持續運行的 Apple 建構節點,SSHMac 的遠端 Mac 環境會比把個人 Mac 長期留在辦公室、依賴睡眠設定或臨時遠端桌面更容易維持。你可以先從 SSHMac 的遠端環境入口 核對連線方式,再決定是否增加 macOS 節點,而不是把所有 Agent 任務一次搬過去。