第 3 章
第一次啟動與登入
Codex CLI 的「登入」就是出示一張識別證,讓 OpenAI 知道「該由誰來付這趟差事的帳」。
想像你請了一位很厲害的工程師到家裡幫忙寫程式。他到門口時會先問:「你是哪位?這趟工要記在誰頭上?」——你得出示一張識別證,他才會開工。Codex CLI 第一次跑也一樣:它會先請你登入,確認身分,之後才願意動手讀檔、改檔、跑指令。
而且這張識別證有兩種:
- 一種是「訂閱證」(用你的 ChatGPT 方案登入)——像月票,刷一下就走,額度算在你的 ChatGPT 方案裡。
- 一種是「計次票」(用 API key 登入)——像跳表計程車,跑多少算多少,按用量計費。
別怕!這一章我們會帶你把識別證辦好。你只要跟著做,大部分人只需要一個指令、點兩下瀏覽器就完成,剩下的交給它就好。本章你會學到:
第一次用,先走 ChatGPT 登入;不要為了跳過畫面就建 API key
若你有可使用 Codex 的 ChatGPT 帳號,先選「Sign in with ChatGPT」最單純。API key 是另一個平台帳務與金鑰管理路線,不等於 ChatGPT 訂閱,也可能有獨立的用量/計費;公司帳號則先確認管理者是否允許。兩種都不確定時,先看 官方 Codex CLI 文件的當前登入選項,別在本機亂試 key。
- 第一次打開 Codex 會看到什麼、它在問你什麼;
- 兩種登入方式怎麼選(訂閱 vs 計次);
codex login這一家子指令逐一怎麼用,連沒有瀏覽器的遠端機器都能登;- 你的「識別證」存在哪、怎麼保護它、怎麼登出與換帳號。
重要提醒
Codex CLI 更新非常快,旗標(指令後面的 --xxx 選項)偶爾會增刪。本章所有逐字旗標以 2026-06-17 查核的官方文件為準;真要照做前,永遠以你電腦上實機跑 codex login --help 的輸出為準。
3.1 首次啟動會發生什麼
裝好 Codex CLI 後(安裝步驟見第 2 章),啟動它只要一個指令。打開終端機(不知道終端機在哪?複習第 1 章),輸入:
codex
按下 Enter。如果你還沒登入過,Codex 不會直接開工,而是先停下來請你登入。
官方的說法很直接:在終端機跑 codex 就能啟動工具;當「沒有有效的登入 session」時,CLI 預設會走「用 ChatGPT 登入」這條路(這是查核過的官方行為)。
實際畫面大概是這樣(以下為示意,實機文字可能略有不同):
Sign in with ChatGPT ← 預設選項(用你的 ChatGPT 方案)
Sign in with an API key
你用方向鍵上下選、按 Enter 確認。新手直接選第一個「Sign in with ChatGPT」就好——它會自動幫你打開瀏覽器完成登入,流程最少。
好消息
登入這件事一台電腦通常只要做一次。登入成功後,你的識別證會被存在電腦裡(存哪等等第 3.4 節會講),之後再跑 codex 就會直接開工,不用每次重登。
重要提醒
如果你跑 codex 後沒看到登入畫面、直接進入對話,代表這台電腦先前已經登入過了。想確認目前用哪個身分,跑 codex login status(見第 3.3 節)。
登入完成之後,歡迎畫面在跟你說什麼
登入成功(或這台電腦本來就登入過、直接跳過登入畫面)之後,Codex 不會馬上把游標丟給你打字,而是先印出一小段「開場白」。這段話值得花五秒鐘讀一下,因為它一次告訴你四件事:目前用哪個模型、你現在的工作目錄在哪、目前的沙箱與可寫入範圍是什麼、以及幾個新手最該先打的指令。
大致的資訊分佈長這樣(實際排版與文字以你電腦上看到的為準):
model: gpt-5.x
directory: ~/projects/我的網站
sandbox: workspace-write(可寫入目前資料夾)
approval: on-request
建議指令:/init /status /permissions /model /review
這五個建議指令,你不用現在全部搞懂,但先知道各自負責什麼、之後哪一章會細講,能讓你少走不少冤枉路:
| 指令 | 一句話說明 | 詳細用法 |
|---|---|---|
/init | 幫你生一份 AGENTS.md 骨架,寫下這個專案的規矩 | 第 5 章 |
/status | 看目前的模型、沙箱設定,以及這條 session 用了多少額度 | 第 7 章 |
/permissions | 當場調整沙箱與核可等級,不用重開 | 第 6 章 |
/model | 切換要用哪個模型 | 第 4 章 |
/review | 請 Codex 自己審查目前工作目錄裡的改動 | 第 6 章 |
小技巧
新手常見的衝動是看到這排指令,就想一口氣把 config.toml、MCP 外部工具全部裝好、每個設定都調一輪。先別急。第一次上手,建議先確認「純 CLI + 登入成功 + 跑一次簡單的修改」這條最短路徑能順利跑完,之後再一項一項加自訂設定。這樣萬一後面出狀況,你才分得清是登入或沙箱這種核心機制壞了,還是自己某個設定改壞了。
小技巧
之後每次開工,養成先打一次 /status 的習慣。它會告訴你目前是哪個身分登入、套用哪種核可政策、這條 session 還剩多少額度視窗——比起改到一半被擋下來、或被限流之後才回頭猜原因,先看一眼划算得多。
重要提醒
上面這段開場白的排版、欄位名稱,甚至建議指令的清單,都會隨版本調整(官方目前的 slash 指令已經有 40 多個,之後只會更多)。它長什麼樣、印出哪些欄位,一律以你實機看到的為準——重點不是背這個畫面,是知道「有這回事,讀一下不吃虧」。
工作目錄是不是 Git 專案,決定了它一開始有多信任你
剛剛開場白裡的 sandbox 那一欄不是隨機給的,背後有一個簡單的判斷邏輯:Codex 啟動時會先看一眼你目前的工作目錄是不是 Git 版控資料夾,再決定用哪種預設安全等級招呼你。
- 如果是 Git 版控資料夾——Codex 傾向給你比較好用的「Auto」預設:可以自由讀寫這個資料夾(技術說法是
workspace-write),只有真的需要動用範圍外的資源時,才停下來問你一聲(on-request)。 - 如果不是 Git 版控資料夾——Codex 對你的信任預設會保守很多,傾向從唯讀開始,直到你自己用
/permissions明確放寬。
這裡有兩個容易混在一起、但其實各自獨立的概念,先分清楚,之後看第 6 章會輕鬆很多:
| 軸 | 回答的問題 | 選項 |
|---|---|---|
| 沙箱(sandbox) | 技術上「能不能」做 | 唯讀/可寫工作區/完全放行 |
| 核可(approval) | 「要不要」先停下來問你 | 不信任/視情況詢問/從不詢問 |
這兩軸任何時候都能用 /permissions 當場調整,不需要重開。第一次啟動看到的只是「預設值」,不是永久設定。
小技巧
如果你在第 1 章已經養成「開工前先 git init / git commit」的習慣,這裡就直接拿到回報:不只是幫自己留一個能還原的存檔點,還會讓 Codex 一開始跟你合作得更順手,不用一進門就被擋在唯讀模式外面。
重要提醒
如果你在一個還沒 git init 的資料夾第一次啟動 Codex,感覺起來可能像是「叫它改檔案卻沒反應」——它不是壞掉,只是還沒被你明確信任。這時候不用緊張,git init 一個本地空 repo(不必有 remote),或直接打 /permissions 手動放寬,都能解決。安全分級的完整邏輯、三種預設模式怎麼選,第 6 章有完整拆解,這裡你只要記得:這個保護不是隨機的,是看你的資料夾有沒有版控。
3.2 用 ChatGPT 登入 vs 用 API key(怎麼選)
這是本章最重要的一個岔路:你要用哪一種「識別證」?先用一句話記住差別——
- 用 ChatGPT 登入:額度算在你的 ChatGPT 訂閱方案裡(像月票)。
- 用 API key 登入:按 token 用量向你的 OpenAI Platform 帳號計費(像跳表)。
下面這張表幫你一眼選對:
| 你的情況 | 建議 | 為什麼 |
|---|---|---|
| 你已經有 ChatGPT 訂閱(Plus / Pro / Business…),只是想在終端機裡用 | ✅ 用 ChatGPT 登入 | 額度已內含在方案裡,不必另外開 API 計費 |
| 你完全是新手,想最快開始 | ✅ 用 ChatGPT 登入 | 點兩下瀏覽器就好,不用去後台生 key |
| 你要做自動化 / CI/CD / 寫腳本無人值守 | ✅ 用 API key 登入 | 適合機器跑,不需要瀏覽器互動 |
| 你想要明確的「按 token 計費」、用 OpenAI Platform 帳單管理 | ✅ 用 API key 登入 | 走標準 API 費率,帳單清楚 |
官方對這兩條路的定義是這樣(查核確認):
- Sign in with ChatGPT = 訂閱制存取(subscription access):用 ChatGPT 方案內含的 Codex 額度,並沿用你 ChatGPT workspace 的權限、企業資料保留與在地化設定。
- Sign in with an API key = 用量計費存取(usage-based access):官方原文「OpenAI bills API key usage through your OpenAI Platform account at standard API rates.」(OpenAI 以標準 API 費率,透過你的 OpenAI Platform 帳號對 API key 用量計費。)
重要提醒
用 API key 登入時,只支援「本機 Codex 工作流」。有些依賴 ChatGPT workspace 或雲端服務的功能,在 API key 模式下會受限或不能用(官方明講)。所以如果你的工作需要那些雲端功能,選 ChatGPT 登入。
重要提醒
如果你的 ChatGPT 帳號是用「電子郵件+密碼」這種傳統方式登入(不是透過 Google / Microsoft 之類的第三方單一登入),官方會要求你先設定多因素驗證(MFA),才能用這個帳號使用 Codex 的雲端功能。卡在這一步的話,去 ChatGPT 網頁版的帳號安全設定裡把 MFA 打開即可。
哪些 ChatGPT 方案內含 Codex?
如果你打算走「ChatGPT 登入」,先確認你的方案有 Codex 額度。官方 Help Center 說明 Codex 內含於下列方案(查核確認):
Free、Go、Plus、Pro、Business、Edu、Enterprise
各方案的月費與定位(官方 Codex 定價頁逐字,2026-06-17 fetch):
| 方案 | 月費 | 定位 |
|---|---|---|
| Free | $0 / 月 | 基本探索 |
| Go | $8 / 月 | 輕量任務 |
| Plus | $20 / 月 | 專注編碼 session |
| Pro | 從 $100 / 月起 | rate limit 為 Plus 的 5 倍或 20 倍 |
| Business | 按用量(每席次) | 團隊席次 |
| Enterprise / Edu | 聯絡業務 | 組織級部署 |
| (API Key) | 按用量 | 依標準 API 費率計費 |
小技巧
用 ChatGPT 登入時,CLI 的用量和 Codex 網頁版、IDE 版共用同一份額度(一個 5 小時的滾動視窗),不是各自獨立的桶子。額度怎麼算、怎麼查、Plus/Pro 撞到上限怎麼加買 credits,完整內容留到第 16 章詳談。
重要提醒
上方的月費與方案數字以官方頁面 2026-06-17 抓取為準,且定價變動很快。精確金額與各方案內含額度,以 官方 Codex 定價頁 與 chatgpt.com/pricing 即時顯示為準。
重要提醒:登入成功,不代表什麼都能用
選對了登入方式,不代表帳號裡的每樣東西都能用。有兩個常見的「方案/工作區」層級錯誤,值得先認得,免得誤以為是 CLI 壞了:
- 選到方案不支援的模型:如果跳出類似「The 'gpt-5.x-codex' model is not supported when using Codex with a ChatGPT account」這樣的訊息,通常是設定檔(
config.toml或某個 profile)裡寫死了一個模型代號,但你目前的 ChatGPT 方案或工作區沒開通那顆模型。解法很簡單:打/model,從目前方案真正支援的清單裡挑一個。 - 「No eligible ChatGPT workspaces found」:即使你平常在瀏覽器裡用 ChatGPT 網頁版用得好好的,也可能跳出這個錯誤。這不是 CLI 故障,而是代表你目前這個帳號/工作區沒有 Codex 的使用權限——需要去帳號或工作區的管理端確認 Codex 有沒有被開通,不是重裝 CLI 能解的。
用 ChatGPT 登入的隱藏好處(限時)
官方曾推出限時優惠:Plus / Pro 使用者用 ChatGPT 登入 Codex CLI 後,可在接下來 30 天內兌換免費 API credits(Plus 約 $5、Pro 約 $50)。
重要提醒
這是限時推廣,金額與期限隨時可能變動或結束。是否還有、給多少,一律以官方當下公告為準,別把這當成穩定福利。
3.3 codex login 家族逐字與 headless/SSH 登入
SSH、裝置碼、API key 是選讀
你在自己的電腦、有瀏覽器、只要第一次啟動 Codex 時,不需要讀這節的旗標或設定帳號安全選項;直接用 3.1 的一般登入即可。只有遠端主機、公司政策或已經有 API 專案時才繼續。
第 3.1 節我們是「跑 codex 順便登入」。但你也可以單獨叫出登入流程,或在腳本裡精準控制要用哪種識別證。這就要靠 codex login 這一家子指令。
三個基本指令
| 指令 | 它做什麼 |
|---|---|
codex login | 登入。不加任何旗標時,自動開瀏覽器走 ChatGPT 登入流程 |
codex login status | 印出目前用哪種登入方式;已登入時退出碼(exit code)為 0,方便腳本判斷 |
codex logout | 登出,把 API key 與 ChatGPT 兩種憑證都清掉。這個指令沒有旗標 |
最常用的就是直接:
codex login
跑下去會打開瀏覽器,你在瀏覽器裡用 ChatGPT 帳號登入,完成後瀏覽器會把識別證送回 CLI,終端機就會顯示登入成功。
想確認自己現在是誰、用哪種方式登入:
codex login status
codex login 的三個旗標
codex login 後面可以接旗標,指定不同的登入方式。官方目前列出這三個(查核確認,逐字):
| 旗標 | 它做什麼 | 範例 |
|---|---|---|
--device-auth | 改用「裝置碼」流程登入,不開瀏覽器視窗(沒有圖形介面的遠端/SSH 機器用) | codex login --device-auth |
--with-api-key | 從 stdin(標準輸入)讀一把 API key 進來 | printenv OPENAI_API_KEY | codex login --with-api-key |
--with-access-token | 從 stdin 讀一個 access token 進來 | printenv CODEX_ACCESS_TOKEN | codex login --with-access-token |
重要提醒
--device-auth 官方目前標示為 beta(測試中),行為可能調整。用之前以實機 codex login --help 顯示為準。
小技巧
如果你在自己的 CLI 裡完全找不到「裝置碼登入」這條路、或跑了 --device-auth 沒反應,先別懷疑是 CLI 壞了——這個功能要先到 ChatGPT 網頁版帳號的 Security(安全)設定裡,手動打開「Allow device code login」(允許裝置碼登入)這個開關,CLI 這端才會真的走得通。這是很多人第一次找不到入口的原因。
用 API key 登入的正確姿勢:從 stdin 餵,不要寫在指令裡
如果你要走 API key,正確做法是把 key 從 stdin「餵」進去,像這樣。這兩行的前提是你已經依官方平台/公司流程把 OPENAI_API_KEY 安全地放進目前終端機的環境變數;本章不教新手建立或永久寫入 key,因為那會牽涉帳務、共享電腦與秘密管理。尚未有這個前提就回到一般 ChatGPT 登入。
🍎 Mac / 🐧 Linux:
printenv OPENAI_API_KEY | codex login --with-api-key
🪟 Windows (PowerShell):
$env:OPENAI_API_KEY | codex login --with-api-key
這裡 printenv OPENAI_API_KEY(Windows 是 $env:OPENAI_API_KEY)的意思是「把名為 OPENAI_API_KEY 的環境變數的值印出來」,再用管線 | 把它送進 codex login --with-api-key。
為什麼要這麼麻煩,不直接打 --api-key 你的key? 因為直接把 key 打在指令裡,它會留在你的指令歷史(shell history)、也可能被別人用 ps 看到正在跑的指令參數——等於把密碼貼在公布欄。從 stdin 餵就避開這個風險,這是刻意的安全設計。
重要提醒
網路上有些舊教學會叫你用 codex login --api-key <你的key>——這個舊旗標已經不在官方清單裡,形同棄用。現在跑它只會得到一個誤導性的「缺值」錯誤。請一律改用 --with-api-key 從 stdin 餵。(查核確認:官方 reference 只列 --with-api-key,沒有 --api-key。)
小技巧
自動化或 CI 腳本要登入時,就用上面的 printenv OPENAI_API_KEY | codex login --with-api-key 模式,key 從環境變數來、從 stdin 進,全程不出現在指令字串裡。
沒有瀏覽器怎麼辦?headless / SSH 登入
有時候你是 SSH 連到一台遠端伺服器,或在一台沒有圖形桌面的機器上工作——根本沒有瀏覽器可以開。這時候普通的 codex login 會卡住,因為它想開瀏覽器卻開不了。
解法是加 --device-auth,改用「裝置碼」流程:
codex login --device-auth
它的運作方式像智慧電視登入串流平台:CLI 會給你一組裝置碼和一個網址,你在另一台有瀏覽器的裝置(例如你自己的手機或筆電)打開那個網址、輸入裝置碼完成授權,遠端那台機器就登入成功了。
小技巧
WSL(Windows 上的 Linux 子系統)有時普通登入會失敗,出現像 Token exchange failed 的訊息。遇到這種情況,改用 codex login --device-auth 常常就能繞過。更多 Windows / WSL 的坑詳見第 16 章。
登入卡住?搞懂瀏覽器背後在跟哪個埠號說話
前面說 codex login 會「自動幫你打開瀏覽器完成登入」,但它實際的運作方式值得拆開來看一次——搞懂這個機制,遠端/SSH 環境常見的卡關,你會一眼看穿原因,不用照著網路上的偏方亂試。
流程是這樣:CLI 啟動時,會在你這台機器上悄悄開一個只監聽本機的小型伺服器(位址約為 127.0.0.1:1455,精確埠號以你實機登入畫面顯示的網址為準),然後打開瀏覽器帶你完成 ChatGPT 的 OAuth 登入。瀏覽器這邊登入成功後,會把拿到的識別證(access token)送回這個本機小伺服器,CLI 收到後才存進 auth.json、顯示登入成功。整個交手都是「瀏覽器 → 你自己這台機器的那個埠號」,沒有例外。
重要提醒:SSH 到遠端主機時,這一步最容易斷
如果你是 SSH 連進一台遠端伺服器,在那台遠端機器上跑 codex login,「監聽 1455」的其實是遠端主機,不是你自己的筆電。但登入完成的畫面卻是在你本機的瀏覽器裡跳出來——本機瀏覽器試著連 http://localhost:1455/auth/callback,連的卻是「你自己筆電的 1455」,那裡什麼都沒在監聽,於是看到「Hmmm, can't reach this page」或 ERR_CONNECTION_REFUSED。
解法:先建一條 SSH port forward,把本機的 1455 接到遠端的 1455,再到同一個 SSH session裡跑登入:
ssh -L 1455:localhost:1455 user@remote-host
# 連進去之後,在這個 session 裡再跑
codex login
這樣本機瀏覽器連 localhost:1455 時,會經由 SSH 隧道接到遠端那台真正在監聽的伺服器,整個回呼才接得起來。
重要提醒
如果你已經照上面建了這條 SSH port forward、隧道還開著,這時候又在本機自己的終端機另外跑一次 codex login——兩邊會搶同一個本機埠號,變成「Address already in use」。先關掉隧道,或乾脆挑一邊用,別讓兩個登入流程同時佔用同一個埠。
還有一種常見狀況,是埠號根本沒被誰佔用,卻被錯誤回報成「被佔用」:
重要提醒:WSL2「假性埠號衝突」
部分 WSL2 使用者(尤其開了「mirrored networking」網路模式)會在登入時看到:
Port 127.0.0.1:1455 is already in use
Failed to cancel previous login server: connection timed out
但用 netstat 或 lsof 去查,卻找不到任何程式真的佔用這個埠——這是已知的 WSL2 網路模式相容性問題(社群回報,見 GitHub issue #3927),不是你的電腦真的被誰佔了位置。與其在網路設定裡東調西調,直接改用 codex login --device-auth 繞過整個 1455 回呼機制往往是最省事的解法。
重要提醒:Windows 原生安裝(非 WSL2)
Windows 上如果不是用 WSL2、而是原生跑 Codex,1455 有機會落在 Hyper-V / WinNAT 保留的「排除埠號範圍」裡,一樣會連線被拒。可以用 netsh interface ipv4 show excludedportrange protocol=tcp 診斷是不是這個原因。網路上流傳一些暴力排除法(例如暫時關掉 winnat 服務)風險偏高、可能影響其他網路功能,不建議當第一選擇——優先考慮改用 API key 登入或 --device-auth。
這幾種狀況的共通點很清楚:只要本機回呼路徑跟你的網路環境(SSH、WSL2、企業防火牆……)打架超過一次,別跟它耗,直接切 --device-auth——它完全不依賴本機埠號,用另一台裝置開網址輸入裝置碼就能完成,一次繞過這整類問題。更多 Windows / WSL 專屬的登入怪問題,第 16 章有更完整的疑難排解清單。
3.4 憑證存哪、安全注意、登出與切換
登入成功後,你的「識別證」會被存進電腦裡。這一節講它存在哪、怎麼保護、要登出或換帳號怎麼做。
憑證存在哪裡
預設情況下,你的登入憑證會被存成一個檔案 auth.json,位置如下(查核確認):
| 平台 | 憑證檔位置 |
|---|---|
| 🍎 macOS / 🐧 Linux | ~/.codex/auth.json |
| 🪟 Windows | %USERPROFILE%\.codex\auth.json |
這裡的 ~/.codex(Windows 是 %USERPROFILE%\.codex)是 Codex 放所有設定與狀態的「家目錄」。它由環境變數 CODEX_HOME 控制,預設值就是 $HOME/.codex。
小技巧
想把 Codex 的設定與憑證放到別的位置(例如多人共用機器、或想隔離測試)?設定 CODEX_HOME 環境變數即可。注意:改 CODEX_HOME 會一併搬走 config.toml 與 auth.json,不只 auth.json 一個檔。
auth.json 等同密碼——別外流
auth.json 裡面裝的是 access token(存取權杖),它等同你的密碼。官方的安全警語逐字是:
Treat
~/.codex/auth.jsonlike a password: it contains access tokens. Don't commit it, paste it into tickets, or share it in chat.
翻成白話就是:把 ~/.codex/auth.json 當密碼看待,裡面有 access token。不要 commit 進 Git、不要貼進工單、不要貼進聊天視窗。
重要提醒
這是真會出事的點。auth.json 一旦外流,別人就能用你的身分(和你的額度/帳單)操作 Codex。
- ❌ 絕對不要:
git add .時把它一起加進版本控制、截圖貼到群組求救、貼到客服工單。 - ✅ 正確做法:如果真的需要搬運它(例如 CI/CD),用
chmod 600限制只有你能讀,並透過安全的金鑰儲存傳遞。CI/CD 的完整搬運規則見第 11 章。
進階:憑證存檔案還是存系統鑰匙圈
預設 auth.json 是一個純檔案。如果你想讓系統用更安全的「作業系統憑證庫」(像 macOS Keychain)來保管,可以在 ~/.codex/config.toml 設定鍵 cli_auth_credentials_store(查核確認):
cli_auth_credentials_store = "auto" # 可選 "file" | "keyring" | "auto"
| 值 | 行為 |
|---|---|
file | 存進 auth.json 純檔案 |
keyring | 存進作業系統憑證庫(如 macOS Keychain) |
auto | 優先用作業系統憑證庫,失敗則退回存檔案 |
重要提醒
如果你要做 CI/CD、需要把憑證檔搬來搬去,官方建議明確設 cli_auth_credentials_store = "file",這樣才搬得動 auth.json。config.toml 的完整用法見第 8 章。
登出與切換帳號
想登出?跑:
codex logout
它會把 API key 與 ChatGPT 兩種憑證都一起清掉(這個指令沒有旗標)。
小技巧
用了一段時間後,如果突然跳出 401 或 token_expired 這類錯誤,不用花時間查原因——官方的建議做法就是直接 codex logout 再 codex login 重新來一次,通常比繼續除錯快得多。
想換帳號或換登入方式(例如從 ChatGPT 登入切到 API key)最簡單可靠的做法就是:先 codex logout,再用你要的方式重新 codex login。
重要提醒
有個已知的坑——當你 ChatGPT 登入還在有效狀態時,光靠設一個 OPENAI_API_KEY 環境變數不一定能切到 API key 模式。最穩的切換方式就是先 codex logout 清乾淨,再重登。
如果你想在兩種憑證並存時「釘住」偏好哪一個,社群間流傳一個設定鍵 preferred_auth_method:
preferred_auth_method = "apikey" # 或 "chatgpt"
重要提醒
preferred_auth_method 並未出現在官方的 config 參考文件或 auth 頁面,只在社群與部分設定範本中見到;官方有收錄的、語意相近的是 forced_login_method("chatgpt" / "api",但那是「強制」而非「偏好」,屬企業管控用,兩者不是同一個鍵)。這個鍵是否生效、語意是否如述,以你安裝版本的 config 範本與實機行為為準,別當官方保證。forced_login_method 真正的用法,3.5 節「企業受管環境」會展開。
補充:CLI 和 IDE 共用同一份登入
如果你之後會在編輯器(VS Code / JetBrains)裝 Codex 的 IDE 擴充,好消息是:IDE 擴充和 CLI 共用同一份登入與設定,在 CLI 登入一次,IDE 那邊通常也認得你,不必再登一次。IDE 整合的細節留到第 12 章。
3.5 🎓 高手進階
前面四節已經夠新手把識別證辦好、用得安全。這一節是給「要在沒有人坐在螢幕前的機器上登入」「要把憑證硬化到企業級」的進階讀者——CI runner、cron 排程、SSH 上的遠端伺服器、跑自動化腳本的容器。重點只有三個:無人值守怎麼餵憑證(三條路)、明文 token 怎麼搬進系統鑰匙圈、怎麼避免 token 在 ps / shell history 裡裸奔。
一、headless(無人值守)的三條認證路
在 CI / cron / Docker / SSH 這種沒有互動式 TTY(沒有人能在終端機按 Y/n、也沒有瀏覽器可開)的環境,普通的 codex login 會卡住或失敗。Codex CLI 提供三條路讓自動化拿到身分(查核確認):
| # | 路徑 | 怎麼用 | 適用情境 |
|---|---|---|---|
| 1 | CODEX_API_KEY 環境變數 |
把 API key 放進這個環境變數,只有 codex exec 認得 |
單次非互動跑(CI step、cron job)用 API key 計費 |
| 2 | CODEX_ACCESS_TOKEN / --with-access-token |
把一個 ChatGPT/Codex access token 從 stdin 餵進 codex login --with-access-token |
想在自動化裡沿用「ChatGPT 訂閱」身分(而非 API 計費)時 |
| 3 | codex login --device-auth(裝置碼) |
CLI 給裝置碼+網址,你在另一台有瀏覽器的裝置完成授權(見 3.3 節) | 遠端機器第一次互動式登入、WSL Token exchange failed 繞過 |
重要提醒(第 1 條最容易踩坑)
CODEX_API_KEY 這個環境變數只在 codex exec(非互動子命令)被支援(官方明講)。如果你以為在普通互動 codex 裡設個 CODEX_API_KEY 就會自動登入——不會。互動模式請走 3.3 節的 printenv OPENAI_API_KEY | codex login --with-api-key。codex exec 是什麼、怎麼跑自動化,留到後面的 codex exec 專章詳談。
小技巧(cron / launchd 範式)
無人值守腳本最乾淨的姿勢是「key 從檔案或秘密管理讀進環境變數 → 交給 codex exec」,例如:
export CODEX_API_KEY="$(cat /etc/codex/key)" # 只有 codex exec 認 CODEX_API_KEY
codex exec --sandbox workspace-write "run npm audit; fix only critical vulns"
注意 ~/Library/LaunchAgents/*.plist(macOS launchd 排程檔)是跨程式共用資源,要改只用編輯器改你自己那段,別整檔覆寫。
重要提醒
第 2、3 條(CODEX_ACCESS_TOKEN、--device-auth)目前都帶較不穩定/beta 的色彩——--device-auth 官方標 beta(見 3.3),CODEX_ACCESS_TOKEN 屬「信任的自動化」用途。實際鍵名與行為以你安裝版本的 codex login --help 與官方 auth 頁為準,別寫死在長期腳本裡。
二、別讓 auth.json 的明文 token 躺在硬碟上——搬進系統鑰匙圈
3.4 節說過,當 cli_auth_credentials_store = "file" 時,~/.codex/auth.json 裡裝的是明文 access token(沒加密的純文字)。對個人單機這還能接受;但對「多人共用的伺服器」「會被備份/快照的機器」「合規要求高的環境」,明文 token 躺在硬碟上就是風險。
進階做法是把儲存切到作業系統的憑證庫(在 ~/.codex/config.toml,鍵就是 3.4 節那個 cli_auth_credentials_store):
cli_auth_credentials_store = "keyring" # 存進 OS 憑證庫(如 macOS Keychain),不落明文檔
| 值 | 進階場景建議 |
|---|---|
keyring | 安全優先:token 進 OS 憑證庫,硬碟上不再有明文 auth.json |
auto | 折衷:優先用 OS 憑證庫,失敗才退回存檔——日常推薦 |
file | 只在「需要把憑證搬到別台機器」(CI/CD)時用——因為 keyring 裡的東西搬不動,得是檔案才搬得走 |
重要提醒(找不到檔別慌)
一旦你用了 keyring 或 auto 且憑證進了 OS 憑證庫,你會發現 ~/.codex/auth.json 可能根本不存在。「找不到 auth.json ≠ 沒登入」——它可能好端端躺在 Keychain 裡。要確認登入狀態,一律用 codex login status,別靠「檔案在不在」判斷。
重要提醒(待確認)
有 changelog 提到約 0.140 版起「CLI/MCP 的 OAuth 憑證會加密做本地儲存」。這條來自版本更新日誌、未在官方 config 參考頁逐字佐證,確切版本與行為以你實機的 codex --help 輸出與官方 changelog 當下內容為準,別當成穩定保證。
三、用環境變數,避免 token 被 ps / history 看光
3.3 節已經教過「API key 從 stdin 餵、不要打在指令裡」。這裡把背後的原則講透,因為自動化腳本最容易在這裡漏 key:
ps風險: 你正在跑的指令,它的完整參數(包含你打進去的 key)會被同機器上任何人用ps aux看到。所以codex login --api-key sk-xxx這種寫法,等於把密碼貼在公布欄(這也是為什麼舊的--api-key旗標已棄用、要改用--with-api-key從 stdin 餵)。- history 風險: 直接打進去的 key 會留在 shell history(
~/.bash_history/~/.zsh_history),日後翻歷史紀錄就洩漏。 - 正確姿勢: key 從環境變數或秘密管理來,經 stdin 進 Codex,全程不出現在「指令字串」裡:
🍎 Mac / 🐧 Linux:
printenv OPENAI_API_KEY | codex login --with-api-key
🪟 Windows (PowerShell):
$env:OPENAI_API_KEY | codex login --with-api-key
小技巧(進階收斂)
Codex 在跑子行程時,預設會過濾掉名稱含 KEY / SECRET / TOKEN 的環境變數(這是官方的 secrets 衛生預設,避免你的 API key 被它呼叫的子行程順手讀走)。也就是說,把 key 放在 OPENAI_API_KEY 這類環境變數裡,不只避開 ps/history,還受這層預設過濾保護。這層過濾的細節(shell_environment_policy)屬沙箱/權限進階主題,留到後面的安全強化章節展開。
四、企業受管環境:鎖定登入方式,跨過內網 TLS 攔截代理
最後這一條,是給 IT 部門要幫全公司統一管理 Codex 登入行為、或是身處內網有 TLS 攔截代理的讀者。這兩件事都跟「登入」直接相關,但都不是個人使用者日常會碰到的鍵,先知道有這回事、需要時回來查即可。
先講鎖定登入方式與工作區。3.4 節提過,preferred_auth_method 這個鍵其實沒有官方背書。但官方真的有收錄一組類似、語意卻不同的鍵——差別在於一個是「偏好」,一個是「強制」。在 config.toml 裡(查核確認):
forced_login_method = "chatgpt" # 或 "api"
forced_chatgpt_workspace_id = "00000000-0000-0000-0000-000000000000"
forced_login_method 會強制這台機器(或這份受管設定套用到的所有機器)只能用指定的方式登入,使用者自己選不了;forced_chatgpt_workspace_id 則更進一步,把 ChatGPT 登入鎖定在某個特定的工作區 ID,避免員工不小心(或刻意)用個人帳號的工作區登入公司環境。這組鍵典型的使用情境,是企業用 MDM(行動裝置管理)或設定管理工具,把這段 config.toml 統一推送到所有員工電腦上。
重要提醒
這是企業管控用的鍵,一般個人使用者不需要設定它。如果你是在公司發的電腦上,發現自己「登入方式選不了、被鎖死只能選一種」,很可能就是 IT 部門透過這組鍵統一設定的結果,不是你的 CLI 壞了。
再講內網 TLS 攔截代理。如果你的公司網路會攔截並檢查所有 HTTPS 連線(用公司自己的根憑證做「中間人」式檢查),Codex 第一次 codex login 走 OAuth 交握時很容易被卡住——很多人這時候會誤以為「登入功能壞了」,其實只是瀏覽器/CLI 不認得公司那張自簽憑證。這是 IT 已提供憑證檔的企業進階情境;未知路徑、受管理電腦或 Windows PowerShell 不要猜著套用 Bash 範例。解法是在第一次登入之前,先依公司正式文件告訴 Codex 要信任哪張憑證:
export CODEX_CA_CERTIFICATE=/path/to/corp-ca.pem
codex login
/path/to/corp-ca.pem 是示意字,不能原樣複製;憑證檔與對應設定要由公司 IT/資安提供。順序很重要:先設好憑證環境變數,再登入,不要反過來。這個環境變數與代理、ZDR(零資料保留)相關設定的完整組合技,第 16 章有更完整的表格與案例,這裡你只要記得:企業內網第一次登入卡住,先檢查是不是憑證信任的問題,不要急著回報「登入壞了」。
本章小結
走到這裡,你已經幫 Codex 辦好了「識別證」:你會跑 codex 觸發首次登入、懂得在「ChatGPT 訂閱」與「API key 計次」之間做選擇、會用 codex login 一家子指令(含 SSH/headless 的 --device-auth),也知道憑證 auth.json 存在哪、要當密碼一樣保護。
動手試試
- 在終端機跑
codex,完成你的第一次登入(新手選「Sign in with ChatGPT」)。 - 登入完成後別急著打字,先讀一遍開場白,對照第 3.1 節說的欄位,找出你目前的模型、工作目錄、沙箱模式分別是什麼。
- 跑
codex login status,再跑一次/status(在 Codex 對話裡打,不是在終端機),比較兩者印出的資訊有什麼不同。 - (進階,選做)找一個還沒
git init的空資料夾,跟一個已經是 Git 專案的資料夾,各自跑一次codex,比較兩邊sandbox欄位的預設值有什麼不同。 - (進階,選做)找到你電腦上的憑證檔位置:🍎/🐧 是
~/.codex/auth.json,🪟 是%USERPROFILE%\.codex\auth.json,確認它存在——但別打開貼給任何人。