mcpField
1
1password

1password

github.com/steipete安全7.4k303 次安装1 周前更新
代码仓库

关于 1password

用于遵循 1Password CLI 设置与安全操作流程的技能。它强调读取机密前先验证访问权限、在 tmux 中运行命令,并避免暴露机密值。

主要功能

  1. 01遵循官方设置指南
  2. 02验证 CLI 与账户访问
  3. 03在 tmux 中运行 `op` 命令
  4. 04显式选择账户
  5. 05脱敏处理机密

适用场景

  1. 01设置 1Password CLI 访问
  2. 02读取机密前验证登录状态
  3. 03安全存储或编辑凭据
  4. 04在不泄露机密的情况下排查 CLI 状态

安装

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

$npx skills add https://github.com/steipete/agent-scripts --skill 1password

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

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

详细介绍

1Password CLI

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

参考资料

工作流

  1. 检查操作系统和 shell。
  2. 在 tmux 内确认 CLI 已安装:op --version。
  3. 确认已启用桌面应用集成(按入门指南操作),且应用已解锁。
  4. 必须:为所有 op 命令新建 tmux 会话(不得在 tmux 外直接调用 op)。
  5. 在 tmux 内登录/授权:op signin(预期会出现应用提示)。
  6. 在 tmux 内验证访问权限:op whoami(读取任何机密前必须成功)。
  7. 如果有多个账户:使用 --account 或 OP_ACCOUNT。

Peter 账户默认设置

  • Peter 个人/工作机密的默认账户是 my.1password.com(“Peter Steinberger's Clan”)。
  • 除非 Peter 明确要求,否则不要擅自使用 my.1password.eu / Titan。
  • 存储或读取 Peter 的机密时,每条 op 命令都传入 --account my.1password.com。不要依赖当前选定的账户。
  • op account list 仅显示元数据,但仍必须在 tmux 内运行。账户路由不明确时,用它确认账户名称。
  • op signin --account my.1password.com 可能以状态码 0 返回,但没有有用输出,也可能无法让后续 shell 完成登录。建议在同一个 tmux shell 中完成登录、创建/编辑/获取和验证。

必需的 tmux 会话(T-Max)

shell 工具每条命令都会使用新的 TTY。为避免重复提示和失败,始终在专用 tmux 会话中运行 op,并使用新的 socket/会话名称。

示例(socket 约定请参阅 tmux 技能,不要重复使用旧会话名称):

SOCKET_DIR="${CLAWDBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/clawdbot-tmux-sockets}"
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/clawdbot-op.sock"
SESSION="op-auth-$(date +%Y%m%d-%H%M%S)"

tmux -S "$SOCKET" new -d -s "$SESSION" -n shell
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op signin --account my.1password.com" Enter
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 -p -J -t "$SESSION":0.0 -S -200
tmux -S "$SOCKET" kill-session -t "$SESSION"

已验证可用的机密写入模式

使用新的 tmux 会话,从剪贴板读取机密但不打印出来,可选择验证预期的令牌前缀,并明确写入 Peter 的账户。此 CLI 版本中的 op 类别字符串区分大小写且需使用人类可读形式;请使用 "API Credential",而不是 api_credential。

tmux new-session -d -s op-store-secret 'bash -lc '\''set -euo pipefail
set +x
ACCOUNT="my.1password.com"
ITEM_TITLE="Service API Tokens"
FIELD_NAME="api_token"
EXPECTED_PREFIX=""
NOTES="Created via tmux-safe op workflow"
TOKEN="$(pbpaste)"
if [ -n "$EXPECTED_PREFIX" ]; then
  case "$TOKEN" in "$EXPECTED_PREFIX"*) ;; *) echo "clipboard value does not match expected prefix" >&2; exit 2;; esac
fi
op item create --account "$ACCOUNT" --category "API Credential" --title "$ITEM_TITLE" "$FIELD_NAME[password]=$TOKEN" "notesPlain=$NOTES" >/dev/null
op item get "$ITEM_TITLE" --account "$ACCOUNT" --fields "label=$FIELD_NAME" >/dev/null
echo "stored and verified secret field without printing it"
sleep 30
'\'''

在同一条目中添加第二个机密:

tmux new-session -d -s op-edit-secret 'bash -lc '\''set -euo pipefail
set +x
ACCOUNT="my.1password.com"
ITEM_TITLE="Service API Tokens"
FIELD_NAME="app_token"
EXPECTED_PREFIX=""
TOKEN="$(pbpaste)"
if [ -n "$EXPECTED_PREFIX" ]; then
  case "$TOKEN" in "$EXPECTED_PREFIX"*) ;; *) echo "clipboard value does not match expected prefix" >&2; exit 2;; esac
fi
op item edit "$ITEM_TITLE" --account "$ACCOUNT" "$FIELD_NAME[password]=$TOKEN" >/dev/null
op item get "$ITEM_TITLE" --account "$ACCOUNT" --fields "label=$FIELD_NAME" >/dev/null
echo "stored and verified secret field without printing it"
sleep 30
'\'''

脱敏调试

整个管道都应在 tmux 内运行。检查状态和输出长度,绝不查看机密值。

tmux new-session -d -s op-debug 'bash -lc '\''set -euo pipefail
set +x
SIGNIN_OUTPUT="$(op signin --account my.1password.com 2>&1 || true)"
echo "signin output bytes: ${#SIGNIN_OUTPUT}"
op account list 2>&1 | sed -E "s/(xox[baprs]-)[A-Za-z0-9-]+/\\1REDACTED/g; s/(xapp-)[A-Za-z0-9-]+/\\1REDACTED/g"
sleep 30
'\'''

安全守则

  • 绝不要将机密粘贴到日志、聊天或代码中。
  • 优先使用 op run / op inject,而不是将机密写入磁盘。
  • 如果需要在未启用应用集成的情况下登录,请使用 op account add。
  • 如果命令返回“account is not signed in”,请在 tmux 内重新运行 op signin,并在应用中授权。
  • 不要在 tmux 外运行 op;如果无法使用 tmux,请停止并询问。

评论

支持 Markdown