mcpField
1
1password

1password

github.com/openclaw安全393.3k6.3k 次安装今天更新
代码仓库

关于 1password

此技能指导 Agent 使用官方 1Password CLI,从检查认证方式到验证访问权限。内容涵盖服务账户、桌面应用集成和独立登录,并说明凭据保护规则。

主要功能

  1. 01识别 CLI 认证方式
  2. 02使用 op whoami 验证访问
  3. 03按认证方式执行命令
  4. 04防止密钥进入日志或聊天
  5. 05通过凭据工具引导浏览器登录

适用场景

  1. 01在无头环境配置 CLI 访问
  2. 02通过桌面应用集成运行 CLI
  3. 03使用独立登录进行认证
  4. 04避免网站登录密码暴露

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/openclaw/openclaw --skill 1password

安装后在 Claude Code 中输入/1password确认已加载。

附带文件references/get-started.mdreferences/cli-examples.md

详细介绍

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. 如果有多个账户:使用 --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 使用不同的环境上下文,因此从这些子 Shell 访问该通道并不总是可靠。传输机制因平台而异(macOS 上通过 1Password Browser Helper 使用 XPC,Linux 上使用 Unix 域套接字,Windows 上使用命名管道);Agent 在三个平台上遵循的实际规则相同:直接运行 op。在 macOS 上,一个实用的症状判断依据是位于 ~/Library/Group Containers/2BUA8C4S2C.com.1password/t/ 的 1Password 集成组容器。

op vault list      # may trigger Touch ID / Windows Hello / system auth on first call
op whoami

如果调用返回 1Password CLI couldn't connect to the 1Password desktop app,不要改用 tmux。确认桌面应用正在运行且已解锁,然后重试直接执行。

独立登录(无应用,交互式密码)

这是唯一能借助 tmux 的模式。op signin 会输出一条 eval 风格的导出语句,为 POSIX Shell 设置 OP_SESSION_* 令牌;同一 Shell 中的后续命令将使用该环境变量进行认证。网关为每条命令启动的 Shell 会在多次调用之间丢失此状态,因此持久化 tmux 窗格可让会话令牌保持有效——但只有在 POSIX Shell 中实际使用 eval 应用该导出语句才行。如果仅将 op signin 作为普通命令发送,其标准输出只会打印到窗格中,而 op whoami 将失败。

只有在提供 tmux 技能的 macOS/Linux 主机上,才能采用此 tmux 流程。示例特意打开 /bin/sh,使 POSIX eval "$(op signin ...)" 的输出即使在用户日常使用 fish Shell 时也有效。在 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 或账户选择,请暂停并要求用户 在自己的终端中完成登录;将套接字和会话值提供给他们,以便其在本地 连接。Agent 不应通过 exec 运行 tmux 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 目录中,不要在不同用户之间共享该套接字,并为每次新的登录尝试选择新的会话名称。

浏览器登录(用于 Claude 的 1Password)

如果会话在 Chrome 凭据工具(request_credentials、autofill_credential、enter_verification_code)中提供 Claude,登录网站时应优先使用这些工具,而不是 op:1Password 会直接填写页面,机密信息不会进入上下文。规则:

  • 在导航前,通过一次 request_credentials 调用请求任务所需的每项凭据。
  • 批准操作通过网关主机上的 1Password 提示完成。如果仍在等待中,请告知用户需要解锁哪台主机(“1Password 正在等待此 Mac 上的批准”),而不是重试。
  • 绝不能让用户通过聊天发送密码或一次性验证码;验证码只能通过 enter_verification_code 输入。
  • 不要仅因为浏览器流程需要批准,就退回使用 op read 获取网站密码;这会违背不暴露机密信息的设计初衷。请将 op 用于命令和配置所需的机密信息;当存在浏览器流程时,不要将其用于网站登录。

防护措施

  • 绝不将机密信息粘贴到日志、聊天或代码中。
  • 优先使用 op run/op inject,避免将机密信息写入磁盘。
  • 如果需要在没有应用集成的情况下登录,请先使用 op account add。
  • 如果命令返回“account is not signed in”:
    • 服务账户:重新导出 OP_SERVICE_ACCOUNT_TOKEN
    • 桌面应用:确认应用正在运行且已启用集成
    • 独立版:在同一个 tmux 会话中重新运行 op signin 并进行授权

评论

支持 Markdown