1password

1password

热门

设置并使用 1Password CLI 进行登录、桌面集成以及读取或注入密钥。

38万Star
8.1万Fork
更新于 2026/7/22
SKILL.md
readonly只读
name
1password
description

设置并使用 1Password CLI 进行登录、桌面集成以及读取或注入密钥。

1Password CLI

请遵循官方 CLI 入门步骤。不要猜测安装命令。

参考

  • references/get-started.md(安装 + 应用集成 + 登录流程)
  • references/cli-examples.md(真实的 op 示例)

工作流程

  1. 检查操作系统和 Shell。
  2. 确认 CLI 已安装:op --version
  3. 检测用户已设置的认证模式:
    • 服务账号: 已设置 OP_SERVICE_ACCOUNT_TOKEN(适用于无头环境、CI、网关)。
    • 桌面应用集成: 1Password 桌面应用正在运行且已启用 CLI 集成(适用于 macOS / Windows / Linux 桌面)。
    • 独立登录: 以上两者都不是——每次会话 op signin 都会提示输入账户密码。
  4. 根据认证模式运行 op(见下文)。
  5. 验证访问:在读取任何密钥之前,op whoami 应成功执行。
  6. 如果有多个账户:使用 --accountOP_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。

在此独立登录流程中,每个后续命令都使用相同的 SOCKETSESSION 值。-S "$SOCKET" 标志选择 tmux 服务器套接字;将其放在用户拥有的 0700 目录中,不要在不同用户之间共享,并为每次新的登录尝试选择一个新的会话名称。

安全护栏

  • 切勿将密钥粘贴到日志、聊天或代码中。
  • 优先使用 op run / op inject,而不是将密钥写入磁盘。
  • 如果需要无应用集成的登录,请先使用 op account add
  • 如果命令返回“账户未登录”:
    • 服务账号:重新导出 OP_SERVICE_ACCOUNT_TOKEN
    • 桌面应用:确认应用正在运行且集成已启用
    • 独立登录:在同一个 tmux 会话中重新运行 op signin 并授权