為什麼我讓 AI Agent 自己去 1Password 拿我的密碼?
訂閱 1Password、裝桌面版加上 op 命令列工具,讓 Claude Code 用 secret reference 自己去保險箱拿密碼。明文 token 從此不出現在我電腦任何一個檔案裡。
你是怎麼管理你自己的帳號密碼,以及 API 金鑰、Access Token 的?
當你要製作 AI 自動化工作流的時候,需要登入某個系統,使用密碼或 API 金鑰的時候,你又是怎麼將這些機敏資訊提供給 AI?
如果你沒有第一個問題的答案,然後你每一次在製作自動化工作流的時候,都是把你的密碼以及 API 金鑰,直接提供給 AI 讓他幫你設定。
那麼也許你該考慮使用更安全的帳密管理方式。
很久以前我曾經做過一個工作流,就是自動化發文到 Threads。
由於 Threads 的 Access Token (你可以視為密碼),需要每 60 天更新一次。
為了方便,我就直接寫了一個 Google Apps Script,然後把更新完畢的 Access Token 放在 Google 試算表,再讓 N8N 去抓 Google 試算表內的資料。
當然個人使用的話,這種方式還算勉強可以接受啦。
可是我最近開始在我的辦公室環境製作工作流,由於工作流會牽涉到公司的環境,所以我不可能再採取類似的不安全管理方式。
因此我決定訂閱 1Password,使用了幾天之後,感覺非常滿意。
1Password 的設計邏輯
使用 1Password,是將我們的帳號密碼以及 API 金鑰都放在本地端,雲端只會儲存加密過後的資料。
每個帳號背後綁了兩把鑰匙:
主密碼:我自己要記住
Secret Key:1Password 隨機產生的長字串,存在你裝置上,同時也會產一份「Emergency Kit」PDF
這兩把鑰匙都不會上傳到 1Password 的伺服器。
所以就算 1Password 公司遭到駭客攻擊,駭客拿到的也只是一段亂碼,他不會知道要如何使用。解密的過程都是在我的本地端完成的。
還有,使用 1Password,我的密碼資料庫還可以在任意多台電腦同步,但每台電腦都需要主密碼加 Secret Key 才能解開。
所以我現在的 1Password 主要放在幾個裝置:
我的 iPhone
公司用的 Windows 電腦
家裡的一臺 Mac mini
一個 Windows 筆電
假設我在家裡要操作遠端連線,連到公司的主機,我就不需要特別記得密碼,因為我可以在家直接使用 1Password 去登入即可。
如果我想要搭配 AI 代理,例如 Claude Code 或 Codex,使用 1Password 也是好選擇,我們就不需要擔心會有第三方去看到我的帳號與密碼。
我的 AI 代理只會看到路徑,像 op://Personal/notion-api/credential 這種地址。
而且每次要取用密碼的時候,都會先經過桌面版的驗證,例如 Touch ID,或者是任何我想使用的驗證方式。
1Password CLI 的兩個關鍵指令
我電腦上裝的是 1Password 桌面版加上一個叫 op 的命令列工具(也就是 1Password CLI)。桌面版負責管密碼、用指紋解鎖;op 負責讓 Claude Code 在終端機裡呼叫 1Password 裡的內容。
使用之前,記得在設定->開發人員,勾選與 1passwird CLI 整合。
Claude Code 在整套流程用到兩個指令,
指令一:op read,拿一筆密碼
假設我在 1Password 的 Personal 保險箱裡,有一個叫 notion-api 的條目,裡面 credential 那一欄存著 Notion 的 API token。我想讓 Claude Code 在終端機裡拿到它,輸入:
op read "op://Personal/notion-api/credential"
按下 enter,1Password 桌面版會跳出來叫我用 Touch ID 解鎖。
中間那串 op://Personal/notion-api/credential 是 1Password 的 secret reference:
op://<保險箱名>/<條目名>/<欄位名>
這串文字是密碼的「地址」。我可以把它放進任何設定檔、寫進 README,都不會洩漏任何敏感資訊。
指令二:op inject,把整份設定檔的地址換成內容
上述的 op read 一次只拿一筆資料。如果我有一個 .env 檔需要好幾把 key,比較順手的做法是讓 Claude Code 先寫一份模板,把所有要填的欄位寫成 secret reference:
# .env.tpl
NOTION_TOKEN="op://Personal/notion-api/credential"
OPENAI_API_KEY="op://Personal/openai/credential"
ELEVENLABS_API_KEY="op://Personal/elevenlabs/credential"
然後叫 Claude Code 執行:
op inject -i .env.tpl -o .env
op 會把每一行的 op://... 替換成 1Password 裡的真實值,輸出一份完整的 .env。再把 .env 放進 .gitignore,只 commit .env.tpl,整個專案的 secret 管理就乾淨了。
沒有資安就別談 AI 工作流
我之前在做這些 AI 工作流的時候,常常為了貪圖便利,就直接讓 AI 使用我的明文密碼以及 API 金鑰。
不過實在看了太多的資安相關新聞,所以我開始反省。我們自己認為安全的環境不一定真的那麼安全。
就以我上面的例子來說,我把金鑰放在 Google 試算表上,只有我自己在使用,我也不會把這個連結告訴任何人,理論上是不會外洩的。可是誰知道呢?
資安事件最常發生的,其實就是在一些你原本認為不會出事的地方,然後它就偏偏出事。
因為我打算將 AI 工作流導入到公司裡面,去說服我的同事以及我的長官,能夠採用「AI First」的系統開發以及維護方式;同時,它也可以用在所有辦公室的行政事務上。
所以我第一個要件,就是一定要有一個妥善的資安系統,確保整個流程最起碼有一個基礎的安全設定。
但首先要說,我並沒有拿 1Password 的錢,所以大家也可以不需要使用 1Password,目前我也只是在測試階段。
其他類似 1Password 的產品還有:
第一類:個人用密碼管理員(對標 1Password)
Bitwarden
網址:https://bitwarden.com
特色:開源、可自架、CLI 完整
最低價:免費版/Premium $1.65/月
誰適合:預算敏感、重視開源
Dashlane
網址:https://www.dashlane.com
特色:UI 漂亮、含 VPN、密碼健康度檢查
最低價:$4.99/月(無免費版)
誰適合:重視 UI、要 VPN 二合一
Proton Pass
網址:https://proton.me/pass
特色:瑞士隱私公司、開源
最低價:免費版/Plus $1.99/月
誰適合:已用 Proton 生態系
第二類:開發者 / DevOps / AI Agent 用的 Secrets Management
Doppler
網址:https://www.doppler.com
特色:開發者友善、CLI 強、UI 現代
最低價:免費版(最多 5 人)
誰適合:小團隊、新創
Infisical
網址:https://infisical.com
特色:開源版 Doppler、可自架
最低價:免費版
誰適合:想要 Doppler 體驗但要開源
HashiCorp Vault
網址:https://www.vaultproject.io
特色:業界標準、企業級
最低價:開源免費(自架)
誰適合:大團隊、Kubernetes
如果各位有其他更好的方案,也歡迎留言推薦給我。
如果你對做 AI 工作流也有興趣的話,但是不知道要怎麼開始,目前我有一個為期四周的陪跑計畫。
後記|我怎麼讓 AI 從此再也不打斷我(Mac 版)
寫完前面那些之後,我自己跑了一次完整的發布流程,才發現還有一個新問題。
當我在 IDE 裡叫 Claude Code 做事的時候,每一次它呼叫 1Password,背後其實是開了一個全新的 terminal session。對 1Password 桌面版來說,每個新 session 都是陌生的,所以每次都會跳一個「請求授權」視窗等我按確認。
按一下是不會怎樣,但有時候我發完訊息就去做其他的事情,如果我去倒杯咖啡的時候 Claude Code 跑到一半需要拿密碼,跳出驗證視窗在背後跳出來,整個自動化就卡死在那邊。
對個人方案的人來說這個問題特別麻煩,因為 1Password 官方解法叫 Service Account,但它只開放給 Teams 跟 Business 方案。我這種 Personal 方案根本沒這個選項。
我讓 Claude Code 測試了好幾次,最後組出一套全自動的流程。寫在這邊給有同樣困擾的人參考。
整體架構
[macOS Keychain] 存我的 1Password 主密碼
↓ 自動讀出
[op-login] 用主密碼簽出 session token
↓ 寫進
[~/.config/op-agent/session]
↓ 注入到 OP_SESSION_<shorthand> 環境變數
[op-agent <command>] 偵測過期會自動重新簽入
↓ exec
[op] 正常拿密碼,不跳框
核心是把 1Password CLI 從「桌面版整合模式」切到「手動簽入模式」。手動模式會吐出一個有效 30 分鐘的 session token,把它存成檔案,後續所有 op 指令都帶這個 token 進去,就完全不會碰到桌面版的授權邏輯。
主密碼存進 macOS Keychain 是讓整件事可以無人值守的關鍵。
Keychain 在 Mac 開機解鎖後就自動解鎖,AI 從 Keychain 拿密碼不會觸發驗證視窗。
設定步驟
第一步:把 1Password 帳號加進 CLI 手動模式
打開終端機,輸入
OP_BIOMETRIC_UNLOCK_ENABLED=false op account add \
--address my.1password.com \
--email your-email@example.com
它會問你 Secret Key(你一開始設定時會下載 Emergency Kit PDF ,裡面有)跟主密碼,輸入完成就把你的帳號註冊到 CLI 手動模式。這跟桌面版的帳號清單是分開的,你必須走這一步才能用 session token。
第二步:把主密碼存進 macOS Keychain
security add-generic-password -a "$USER" -s op-master-password -w
按 Enter 之後它會叫你輸入主密碼。
第三步:讓 Claude Code 寫一個 wrapper script 叫 op-agent
這個 wrapper 做三件事:
從 session 檔讀 token,注入到
OP_SESSION_<your_shorthand>環境變數跑一次
op whoami確認 session 還活著如果 session 過期,自動從 Keychain 取主密碼、跑
op signin --raw簽出新 session、再重試
關鍵在第三步的自我修復邏輯。沒有這段的話,session 過期還是要人為介入。有了這段,整套系統就可以連續跑好幾天不需要碰它。
重點片段大概是這樣,你可以貼給 Claude Code 檢視:
# 1. 設定 session env var
SESSION_TOKEN="$(cat "$SESSION_FILE")"
eval "export OP_SESSION_${SHORTHAND}=\"\$SESSION_TOKEN\""
# 2. 確認 session 有效
if ! op whoami >/dev/null 2>&1; then
# 3. 過期就自動 refresh
KEYCHAIN_PW="$(security find-generic-password -a "$USER" -s op-master-password -w 2>/dev/null)"
printf '%s\n' "$KEYCHAIN_PW" | op signin --raw > "$SESSION_FILE"
# 重新設 env var 再 retry
fi
exec op "$@"
第四步:把 shell init 檔的 op 全部換成 op-agent
我的 ~/.zshenv 原本是這樣:
export NOTION_TOKEN=$(op read "op://Personal/notion-newsletter/credential")
換成:
export NOTION_TOKEN=$(op-agent read "op://Personal/notion-newsletter/credential")
開新終端機的時候自動注入到環境變數,Claude Code 啟動時就吃到這些變數,整個 session 期間完全不用再碰 op。
安全考量
把主密碼放進 Keychain 不是完全沒有風險的決定。Keychain 是用 macOS 登入密碼加密的,一旦有人能在你 Mac 解鎖狀態下取得 shell 存取權,他就能透過 security find-generic-password 把主密碼讀出來。
換句話說,這個方案把「攻擊面」從「攻擊者要拿到我的 1Password 主密碼」轉移到「攻擊者要在我 Mac 解鎖時拿到 shell」。
對我個人來說,後者比前者難度高很多,所以我接受這個風險。
但如果你的工作環境有嚴格的合規要求,建議還是維持每次手動 op-login。
目前我用此機制,在我這台 Mac mini 上跑了自動化,發了一次電子報,全程沒被打斷過一次。
我認為對「一人公司」這種需要跑自動化,人在旁邊只看結果的工作模式來說,體驗還可以,後續再觀察看看。




原來1
Pass 這麼好用
那我要搬家了