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 推薦)
在 ~/.hermes/.env 中設置 OP_SERVICE_ACCOUNT_TOKEN(首次加載時,技能會提示輸入此項)。
無需桌面應用。支持 op read、op inject、op run。
export OP_SERVICE_ACCOUNT_TOKEN="your-token-here"
op whoami # verify — should show Type: SERVICE_ACCOUNT
桌面應用集成(交互式)
- 在 1Password 桌面應用中啟用:設置 → 開發者 → 與 1Password CLI 集成
- 確保應用已解鎖
- 運行
op signin並批准生物識別提示
Connect 服務器(自託管)
export OP_CONNECT_HOST="http://localhost:8080"
export OP_CONNECT_TOKEN="your-connect-token"
設置
- 安裝 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
- 驗證:
op --version
- 選擇上述一種認證方法並進行配置。
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+ 版本。
參考資料
references/get-started.mdreferences/cli-examples.md- https://developer.1password.com/docs/cli/
- https://developer.1password.com/docs/service-accounts/