1password cli(op)和1pass是用于终端快速获取邮箱密码、api密钥等凭据的命令行工具;需先安装op并确保桌面应用已解锁,再通过op signin登录、op whoami验证,最后用op get item配合--fields提取指定字段。

想在终端里快速获取1Password中存的邮箱密码、API密钥或数据库连接串,不用打开图形界面翻找,直接用命令行调取——这正是1pass和op两个主流CLI工具的核心用途。
确认当前环境是否支持1Password CLI
先检查系统是否已安装官方1Password CLI(op):运行 op --version。如果返回类似 op version 2.29.0 的输出,说明已就绪;若提示 command not found,则需先安装。
macOS用户推荐用Homebrew安装:brew install 1password-cli。Linux用户需从1Password开发者文档下载对应架构的二进制包并加入PATH。
【必须确保1Password桌面应用已安装且处于解锁状态】——op命令依赖桌面应用提供的安全通道,未运行或已锁屏时所有命令都会失败。
登录账户并验证权限
第一步:在终端中新建一个tmux会话(避免凭据泄露到shell历史),执行:tmux new -s op-session。
第二步:运行登录命令:op signin。此时桌面应用会弹出授权窗口,点击“允许”即可完成绑定。
第三步:立即验证登录结果:op whoami。输出中必须包含有效的账户地址(如 my@example.com)和有效token,否则后续所有读取操作均被拒绝。
使用1pass读取密码(适用于旧版.agilekeychain)
方法一:直接按项目名查询
输入 1pass mail.google.com,工具会自动查找默认路径 ~/Dropbox/1Password.agilekeychain 并提示输入主密码。
方法二:指定非默认钥匙串路径
若你的1Password数据存放在iCloud或自定义文件夹,必须用 --path 显式声明:1pass --path ~/iCloud/1Password.agilekeychain 'GitHub Token'。
方法三:启用模糊匹配快速定位
记不清完整标题时,加 --fuzzy 参数:1pass --fuzzy git.api。它会匹配含“git”和“api”的任意字段,但【不支持通配符或正则表达式】,仅限子串顺序匹配。
读取具体字段值(如用户名、URL、TOTP)
默认 op get item 只返回整个条目JSON,要提取单一字段,必须配合 --fields 参数:
op get item "AWS Production" --fields label=username → 输出该条目的用户名字段内容。
op get item "Google Auth" --fields label=otp --decode → 获取TOTP密钥并自动解码为可扫描格式。
注意:字段label名称区分大小写,常见label有 username、password、url、notesPlain、otp。不确定时先用 op get item "Item Name" 查看完整结构。
在脚本中静默读取密码
方法1:通过环境变量注入主密码(仅限开发测试)OP_SESSION_myexamplecom=$(op signin --raw my@example.com) → 获取临时会话密钥后,后续命令无需重复认证。
方法2:管道传入主密码(生产慎用)echo "MyMasterPass123" | op --session $OP_SESSION_myexamplecom get item "SSH Key" --fields label=password。
方法3:使用 op run 安全执行命令(推荐)op run -- bash -c 'curl -H "Authorization: Bearer $(op get item "API Token" --fields label=password)" https://api.example.com/data' —— 密码仅在子进程中存在,不会泄漏到父shell环境。











