OpenClaw 閘道以共享密鑰驗證 RPC 用戶端。在 macOS 實務上,該密鑰經由三條通道抵達:磁碟上的 openclaw.json 樹、可能改寫設定的macOS App 精靈,以及為無頭工作階段注入變數的LaunchAgent 環境區塊。任一層不一致,維運就會追幽靈:openclaw status 看起來健康,選單列 App 卻顯示離線。本文提供兩張矩陣、八步上線,以及含七步的 HowTo 序列,讓你的Mac mini M4 閘道主機不再在「修好了」與「401 未授權」之間擺盪。
先讀 權杖驗證與 launchd 漂移,並維持 閘道重啟在代理工作階段之外。基線安裝:安裝與部署;健康自動化:doctor 與診斷。帳務問題:說明;新增主機:定價。
症狀在喊「權杖分裂」而非「模型壞了」
- 人格分裂:CLI 成功而選單列 App 卡在設定迴圈。
- 僅重開機後 401:loginwindow 工作階段缺環境變數但檔案權杖正確。
- 升級後 401:App 小版號改寫 JSON,launchd 仍匯出舊變數。
- 間歇成功:重載期間兩個閘道行程短暫以不同設定競速。
矩陣 A:各用戶端從何讀取憑證
| 用戶端 | 主要來源 | 常見漂移 | 穩定器 |
|---|---|---|---|
| SSH 上的 CLI | 使用者家目錄 openclaw.json |
服務帳號與管理員的 $HOME 不同 |
編輯前一律 sudo 成服務帳號 |
| macOS App | 沙箱偏好+ JSON 合併邏輯 | 偵測到「無閘道」後精靈覆寫 | 以變更控管釘選 App 版本;檔案成為準則後才開啟 App |
| launchd 閘道 | Plist EnvironmentVariables 與工作目錄檔案 | 過期的 OPENCLAW_GATEWAY_TOKEN 匯出 |
單一寫入腳本原子更新兩者 |
| 自動化代理 | 父 shell 繼承的環境 | 工具沙箱剝除環境時缺少權杖 | 在工具資訊清單中明確設定檔路徑旗標 |
矩陣 B:上線風險與緩解
| 變更 | 爆炸半徑 | 緩解 |
|---|---|---|
| 每月輪替權杖 | 用戶端重載前所有聊天通道 | 雙寫舊+新至少 15 分鐘並監控 401 率 |
| 搬移閘道使用者 | 絕對路徑與 plist 標籤 | 重建符號連結;依復原文中的 --force 模式重新安裝 |
| 新增第二區主機 | 維運把權杖貼錯主機 | 金庫內每主機祕密名稱;勿重用剪貼簿巨集 |
| 啟用非 loopback 綁定 | 更嚴格的驗證需求 | 與 閘道速率限制 的允許清單配對 |
數值護欄
- 輪替重疊:新權杖寫入磁碟後,舊權杖至少再有效 900 秒。
- 相等性檢查:正式閘道每 6 小時 自動比對 plist 環境與檔案權杖。
- 事件預算:若 401 率超過 RPC 的 1% 達五分鐘,自動凍結 App 升級。
圖形介面提示:當 macOS 隱私提示阻擋無人值守的權杖寫入時,先用一次 VNC 核准,再回到僅 SSH 的維護。
八步上線
- 宣告所有權:每台主機上準則權杖檔路徑。
- 移除重複匯出,避免與 launchd 打架的 shell。
- 腳本原子更新 JSON+plist 單一交易並附備份路徑。
- 加入 CI 式檢查,各層雜湊不同則部署失敗。
- 文件化 App 釘選版號,與閘道語意版並列在 CMDB。
- 每次升級後執行 doctor,再宣告「健康」。
- 訓練值班:先讀 401 日誌為設定漂移,其次才是模型中斷。
- 當團隊無法同意單一寫入者時,以不同 NodeMac Mac mini M4 主機拆分正式與實驗。
常見問題
把權杖放在鑰匙圈是否更好?
若所有消費者一致支援則可能更好。混合堆疊通常先同步檔案+plist,再遷移。
團隊成員的筆電呢?
絕不要在筆電重用正式權杖。使用短壽開發權杖與分離閘道主機,避免咖啡廳意外打到正式 RPC。
launchd 會繼承我的 shell 設定檔嗎?
不會。這正是重開機後權杖「消失」直到你複製到 plist 或閘道讀取的檔案的原因。
權杖衛生偏愛無聊硬體:NodeMac 上的專用 Mac mini M4 以Apple Silicon 餘裕支撐常駐閘道、與開發者筆電相同的原生 macOS 行為,以及 GUI 同意阻擋自動化時的 SSH 加 VNC。節點遍及香港、日本、韓國、新加坡與美國,可把閘道放在使用者旁邊,同時把祕密移出共用筆電。租用而非購買讓「正式閘道」與「實驗閘道」分離變便宜,權杖輪替不必變成政治戰。拆分主機時從 依區域定價 開始。