设置并使用 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 域套接字,Windows 上通过命名管道);对于代理来说,实际规则在所有三个平台上都是一样的:直接运行 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 风格的导出语句,设置一个 OP_SESSION_* 令牌给 POSIX shell;后续在同一个 shell 中的命令通过该环境变量进行认证。网关的每个命令 shell 在调用之间会丢失该状态,因此一个持久的 tmux 窗格可以保持会话令牌存活——但前提是导出语句确实在 POSIX shell 中通过 eval 应用。将 op signin 作为普通命令发送只会将标准输出打印到窗格,而 op whoami 会失败。
tmux 流程仅在 macOS/Linux 主机上可行,且需要 tmux 技能可用。示例特意打开 /bin/sh,以便 POSIX 的 eval "$(op signin ...)" 输出在用户的默认 shell 是 fish 时仍然有效。在 Windows 上,优先使用桌面应用集成或服务账号认证。如果用户只有 Windows 上的独立交互式登录,请停止并要求他们提供持久的 PowerShell 会话机制,或切换到桌面集成/服务账号认证;不要直接翻译 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 轮询窗格,直到登录完成且 shell 提示符返回,或者明显在等待人工输入。如果提示需要密码、MFA 或账户选择,暂停并请用户在自己的终端中完成登录;给他们套接字和会话值,以便他们可以本地附加。代理不应从 exec 运行 tmux attach,因为 attach 会占用当前 TTY 并阻止脚本化的 send-keys / capture-pane 控制。
在 shell 提示符返回后,通过将检查命令发送到同一窗格来验证:
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 会话运行,以便后续的 op read / op run 命令重用同一个已认证的 shell。
在此独立登录流程中,每个后续命令都使用相同的 SOCKET 和 SESSION 值。-S "$SOCKET" 标志选择 tmux 服务器套接字;将其放在用户拥有的 0700 目录中,不要在不同用户之间共享,并为每次新的登录尝试选择一个新的会话名称。
安全护栏
- 切勿将密钥粘贴到日志、聊天或代码中。
- 优先使用
op run/op inject,而不是将密钥写入磁盘。 - 如果需要无应用集成的登录,请先使用
op account add。 - 如果命令返回“账户未登录”:
- 服务账号:重新导出
OP_SERVICE_ACCOUNT_TOKEN - 桌面应用:确认应用正在运行且集成已启用
- 独立登录:在同一个 tmux 会话中重新运行
op signin并授权
- 服务账号:重新导出






