設定並使用 1Password CLI 進行登入、桌面整合,以及讀取或注入機密資訊。
1Password CLI
請依照官方 CLI 入門步驟操作,不要自行猜測安裝指令。
參考資料
references/get-started.md(安裝 + 應用程式整合 + 登入流程)references/cli-examples.md(實際op範例)
工作流程
- 檢查作業系統與 shell。
- 確認 CLI 已安裝:
op --version。 - 偵測使用者已設定的驗證模式:
- 服務帳號: 已設定
OP_SERVICE_ACCOUNT_TOKEN(常見於無頭環境、CI、閘道器)。 - 桌面應用程式整合: 1Password 桌面應用程式正在執行且已啟用 CLI 整合(常見於 macOS / Windows / Linux 桌面)。
- 獨立登入: 以上皆非 —
op signin每次連線都會要求輸入帳號密碼。
- 服務帳號: 已設定
- 根據驗證模式執行
op(請見下方說明)。 - 驗證存取權:在讀取任何機密前,
op whoami應成功執行。 - 若有多個帳號:使用
--account或OP_ACCOUNT。
依驗證模式執行 op
服務帳號(無頭 / 閘道器環境建議使用)
直接執行,無需 tmux 或登入步驟。
export OP_SERVICE_ACCOUNT_TOKEN="ops_..."
op vault list
op read op://app-prod/db/password
桌面應用程式整合
直接執行。請勿包在 tmux 中 — 桌面應用程式整合使用每個使用者的 IPC 通道,該通道雖為閘道器的執行環境所建立,但從 tmux 子 shell 不一定能可靠存取,因為 tmux 子 shell 的環境上下文不同。傳輸方式因平台而異(macOS 上透過 1Password Browser Helper 的 XPC,Linux 上使用 Unix domain socket,Windows 上使用 named pipe);對 agent 而言,實務規則在三種平台上都相同:直接執行 op。在 macOS 上,一個有用的症狀指標是 1Password 整合群組容器位於 ~/Library/Group Containers/2BUA8C4S2C.com.1password/t/。
op vault list # 首次呼叫可能觸發 Touch ID / Windows Hello / 系統驗證
op whoami
如果呼叫回傳 1Password CLI couldn't connect to the 1Password desktop app,請不要改用 tmux。請確認桌面應用程式正在執行且已解鎖,然後重試直接執行。
獨立登入(無應用程式,互動式密碼)
這是唯一需要 tmux 輔助的模式。op signin 會輸出 eval 風格的 export 設定,為 POSIX shell 設定 OP_SESSION_* token;後續在同一個 shell 中執行的指令會透過該環境變數進行驗證。閘道器的每個指令 shell 在呼叫之間會遺失該狀態,因此持續存在的 tmux pane 可以保持 session token 有效 — 但前提是必須在 POSIX shell 中確實使用 eval 套用 export。如果直接將 op signin 作為一般指令傳送,輸出只會顯示在 pane 中,而 op whoami 將會失敗。
tmux 流程僅在 macOS/Linux 主機上可行,且需具備 tmux skill。範例刻意開啟 /bin/sh,以便即使使用者的預設 shell 是 fish,POSIX 的 eval "$(op signin ...)" 輸出仍然有效。在 Windows 上,建議使用桌面應用程式整合或服務帳號驗證。如果使用者在 Windows 上只有獨立互動式登入,請停止並要求他們提供持續的 PowerShell session 機制,或改用桌面整合 / 服務帳號驗證;請不要直接翻譯 tmux 指令。
SOCKET_DIR="${OPENCLAW_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/openclaw-tmux-sockets}"
mkdir -p "$SOCKET_DIR"
chmod 700 "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/openclaw-op.sock"
SESSION="op-auth-$(date +%Y%m%d-%H%M%S)"
tmux -S "$SOCKET" new -d -s "$SESSION" -n shell /bin/sh
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'eval "$(op signin --account my.1password.com)"' Enter
tmux -S "$SOCKET" capture-pane -t "$SESSION":0.0 -p -S - | tail -40
在登入提示期間,請不要排入後續指令。請使用 capture-pane 輪詢 pane,直到登入完成且 shell 提示字元已返回,或明顯正在等待使用者輸入。如果提示需要密碼、MFA 或帳號選擇,請暫停並要求使用者在自己的終端機中完成登入;提供 socket 和 session 值,以便他們可以從本機 attach。Agent 不應從 exec 執行 tmux attach,因為 attach 會佔用目前的 TTY,並妨礙腳本化的 send-keys / capture-pane 控制。
在 shell 提示字元返回後,透過在同一個 pane 中傳送檢查指令來驗證:
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'op whoami' Enter
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'op vault list' Enter
tmux -S "$SOCKET" capture-pane -t "$SESSION":0.0 -p -S - | tail -80
保持 tmux session 持續執行,以便後續的 op read / op run 指令重複使用同一個已驗證的 shell。
在此獨立登入流程中,所有後續指令都使用相同的 SOCKET 和 SESSION 值。-S "$SOCKET" 旗標用於選取 tmux 伺服器 socket;請將其放在使用者擁有的 0700 目錄中,不要在不同使用者之間共用,並為每次新的登入嘗試選擇新的 session 名稱。
防護措施
- 切勿將機密貼到日誌、聊天或程式碼中。
- 優先使用
op run/op inject,而非將機密寫入磁碟。 - 如果需要在沒有應用程式整合的情況下登入,請先使用
op account add。 - 如果指令回傳「帳號未登入」:
- 服務帳號:重新匯出
OP_SERVICE_ACCOUNT_TOKEN - 桌面應用程式:確認應用程式正在執行且已啟用整合
- 獨立登入:在同一個 tmux session 中重新執行
op signin並授權
- 服務帳號:重新匯出






