跳到主要內容

1Password

設置並使用 1Password CLI (op)。在安裝 CLI、啟用桌面應用集成、登錄以及為命令讀取/注入機密時使用。

技能元數據

來源可選 — 使用 hermes skills install official/security/1password 安裝
路徑optional-skills/security/1password
版本1.0.0
作者arceus77-7, enhanced by Hermes Agent
許可證MIT
標籤security, secrets, 1password, op, cli

參考:完整 SKILL.md

信息

以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理所看到的指令。

1Password CLI

當用戶希望通過 1Password 管理機密,而不是使用明文環境變量或文件時,使用此技能。

要求

  • 1Password 賬戶
  • 已安裝 1Password CLI (op)
  • 以下任一方式:桌面應用集成、服務賬戶令牌 (OP_SERVICE_ACCOUNT_TOKEN) 或 Connect 服務器
  • 提供 tmux,以便在 Hermes 終端調用期間保持穩定的認證會話(僅適用於桌面應用流程)

何時使用

  • 安裝或配置 1Password CLI
  • 使用 op signin 登錄
  • 讀取類似 op://Vault/Item/field 的機密引用
  • 使用 op inject 將機密注入配置/模板
  • 通過 op run 使用包含機密環境變量的命令

認證方法

~/.hermes/.env 中設置 OP_SERVICE_ACCOUNT_TOKEN(首次加載時,技能會提示輸入此項)。 無需桌面應用。支持 op readop injectop run

export OP_SERVICE_ACCOUNT_TOKEN="your-token-here"
op whoami # verify — should show Type: SERVICE_ACCOUNT

桌面應用集成(交互式)

  1. 在 1Password 桌面應用中啟用:設置 → 開發者 → 與 1Password CLI 集成
  2. 確保應用已解鎖
  3. 運行 op signin 並批准生物識別提示

Connect 服務器(自託管)

export OP_CONNECT_HOST="http://localhost:8080"
export OP_CONNECT_TOKEN="your-connect-token"

設置

  1. 安裝 CLI:
# macOS
brew install 1password-cli

# Linux (official package/install docs)
# See references/get-started.md for distro-specific links.

# Windows (winget)
winget install AgileBits.1Password.CLI
  1. 驗證:
op --version
  1. 選擇上述一種認證方法並進行配置。

Hermes 執行模式(桌面應用流程)

Hermes 終端命令默認是非交互式的,並且在調用之間可能會丟失認證上下文。 為了在使用桌面應用集成時可靠地使用 op,請在專用的 tmux 會話中運行登錄和機密操作。

注意:使用 OP_SERVICE_ACCOUNT_TOKEN 時不需要此操作 — 令牌會在終端調用之間自動持久存在。

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

tmux -S "$SOCKET" new -d -s "$SESSION" -n shell

# Sign in (approve in desktop app when prompted)
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "eval \"\$(op signin --account my.1password.com)\"" Enter

# Verify auth
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op whoami" Enter

# Example read
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op read 'op://Private/Npmjs/one-time password?attribute=otp'" Enter

# Capture output when needed
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200

# Cleanup
tmux -S "$SOCKET" kill-session -t "$SESSION"

常見操作

讀取機密

op read "op://app-prod/db/password"

獲取 OTP

op read "op://app-prod/npm/one-time password?attribute=otp"

注入到模板

echo "db_password: {{ op://app-prod/db/password }}" | op inject

使用機密環境變量運行命令

export DB_PASSWORD="op://app-prod/db/password"
op run -- sh -c '[ -n "$DB_PASSWORD" ] && echo "DB_PASSWORD is set" || echo "DB_PASSWORD missing"'

安全準則

  • 除非用戶明確要求獲取值,否則切勿將原始機密打印回給用戶。
  • 優先使用 op run / op inject,而不是將機密寫入文件。
  • 如果命令失敗並顯示 "account is not signed in"(賬戶未登錄),請在同一 tmux 會話中再次運行 op signin
  • 如果無法使用桌面應用集成(無頭模式/CI),請使用服務賬戶令牌流程。

CI / 無頭模式說明

對於非交互式使用,請使用 OP_SERVICE_ACCOUNT_TOKEN 進行認證,並避免交互式的 op signin。 服務賬戶需要 CLI v2.18.0+ 版本。

參考資料