﻿---
title: "无头环境用 device-auth 或按次 API key"
summary: "codex login 走 ChatGPT OAuth；远程盒用 --device-auth；脚本用 --with-api-key 从 stdin 读。"
category: automation
level: intermediate
surfaces: [cli, ci]
tags: ["login", "device-auth", "无头"]
canonical: /tips/login-device-auth/
---

# 无头环境用 device-auth 或按次 API key

codex login 走 ChatGPT OAuth；远程盒用 --device-auth；脚本用 --with-api-key 从 stdin 读。

```bash
codex login
codex login --device-auth
printenv OPENAI_API_KEY | codex login --with-api-key
codex login status   # 已登录则退出码 0
codex logout
```

企业钉登录方式和工作区，用顶层 `forced_login_method` / `forced_chatgpt_workspace_id`。凭据不符会登出并退出。

自定义 CA：`CODEX_CA_CERTIFICATE`（回退 `SSL_CERT_FILE`）。

浏览器回调被挡时，优先 `codex login --device-auth`。还不行就从本机转发 CLI 默认回调口：

```bash
ssh -L 1455:localhost:1455 user@remote
# 在这条 SSH 会话里跑 codex login，用本机浏览器打开打印出的地址
```

有浏览器的机器登录成功后，可把 `~/.codex/auth.json` 拷到无头机（当密码）。`cli_auth_credentials_store = "keyring"` 时没有这份文件。

浏览器回调失败先看 `~/.codex/log/codex-login.log`。设了 `log_dir` 就跟过去。这不是明文 `codex-tui.log`。

不要把 login 放进会把 `auth.json` 打进日志的共享镜像构建。

## 来源

- [OpenAI · Authentication](https://learn.chatgpt.com/docs/auth)
- [Codex CLI Cheat Sheet](https://www.agenticcodingweekly.com/p/codex-cli-cheat-sheet)
