Skip to content

Commit bff4435

Browse files
authored
docs: update the docs to explain how to authenticate on a headless machine (#2121)
Users on "headless" machines, such as WSL users, are understandable having trouble authenticating successfully. To date, I have been providing one-off user support on issues such as #2000, but we need a more detailed explanation that we can link to so that users can self-serve. This PR aims to provide detailed information that we can link to in response to user issues going forward. That said, it would also be helpful if we employed heuristics to detect this issue at runtime, and/or we should just link to these docs as part of the `codex login` flow.
1 parent e87974a commit bff4435

File tree

1 file changed

+38
-6
lines changed

1 file changed

+38
-6
lines changed

README.md

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
- [Quickstart](#quickstart)
1919
- [Installing and running Codex CLI](#installing-and-running-codex-cli)
2020
- [Using Codex with your ChatGPT plan](#using-codex-with-your-chatgpt-plan)
21-
- [Connecting through VPS or remote](#connecting-through-vps-or-remote)
21+
- [Connecting on a "Headless" Machine](#connecting-on-a-headless-machine)
22+
- [Authenticate locally and copy your credentials to the "headless" machine](#authenticate-locally-and-copy-your-credentials-to-the-headless-machine)
23+
- [Connecting through VPS or remote](#connecting-through-vps-or-remote)
2224
- [Usage-based billing alternative: Use an OpenAI API key](#usage-based-billing-alternative-use-an-openai-api-key)
2325
- [Choosing Codex's level of autonomy](#choosing-codexs-level-of-autonomy)
2426
- [**1. Read/write**](#1-readwrite)
@@ -99,17 +101,47 @@ Each archive contains a single entry with the platform baked into the name (e.g.
99101
<img src="./.github/codex-cli-login.png" alt="Codex CLI login" width="50%" />
100102
</p>
101103

102-
After you run `codex` select Sign in with ChatGPT. You'll need a Plus, Pro, or Team ChatGPT account, and will get access to our latest models, including `gpt-5`, at no extra cost to your plan. (Enterprise is coming soon.)
104+
Run `codex` and select **Sign in with ChatGPT**. You'll need a Plus, Pro, or Team ChatGPT account, and will get access to our latest models, including `gpt-5`, at no extra cost to your plan. (Enterprise is coming soon.)
103105

104-
> Important: If you've used the Codex CLI before, you'll need to follow these steps to migrate from usage-based billing with your API key:
106+
> Important: If you've used the Codex CLI before, follow these steps to migrate from usage-based billing with your API key:
105107
>
106-
> 1. Update the CLI with `codex update` and ensure `codex --version` is greater than 0.13
107-
> 2. Ensure that there is no `OPENAI_API_KEY` environment variable set. (Check that `env | grep 'OPENAI_API_KEY'` returns empty)
108+
> 1. Update the CLI and ensure `codex --version` is `0.20.0` or later
109+
> 2. Delete `~/.codex/auth.json` (this should be `C:\Users\USERNAME\.codex\auth.json` on Windows)
108110
> 3. Run `codex login` again
109111
110112
If you encounter problems with the login flow, please comment on [this issue](https://github.com/openai/codex/issues/1243).
111113

112-
### Connecting through VPS or remote
114+
### Connecting on a "Headless" Machine
115+
116+
Today, the login process entails running a server on `localhost:1455`. If you are on a "headless" server, such as a Docker container or are `ssh`'d into a remote machine, loading `localhost:1455` in the browser on your local machine will not automatically connect to the webserver running on the _headless_ machine, so you must use one of the following workarounds:
117+
118+
#### Authenticate locally and copy your credentials to the "headless" machine
119+
120+
The easiest solution is likely to run through the `codex login` process on your local machine such that `localhost:1455` _is_ accessible in your web browser. When you complete the authentication process, an `auth.json` file should be available at `$CODEX_HOME/auth.json` (on Mac/Linux, `$CODEX_HOME` defaults to `~/.codex` whereas on Windows, it defaults to `%USERPROFILE%\.codex`).
121+
122+
Because the `auth.json` file is not tied to a specific host, once you complete the authentication flow locally, you can copy the `$CODEX_HOME/auth.json` file to the headless machine and then `codex` should "just work" on that machine. Note to copy a file to a Docker container, you can do:
123+
124+
```shell
125+
# substitute MY_CONTAINER with the name or id of your Docker container:
126+
CONTAINER_HOME=$(docker exec MY_CONTAINER printenv HOME)
127+
docker exec MY_CONTAINER mkdir -p "$CONTAINER_HOME/.codex"
128+
docker cp auth.json MY_CONTAINER:"$CONTAINER_HOME/.codex/auth.json"
129+
```
130+
131+
whereas if you are `ssh`'d into a remote machine, you likely want to use [`scp`](https://en.wikipedia.org/wiki/Secure_copy_protocol):
132+
133+
```shell
134+
ssh user@remote 'mkdir -p ~/.codex'
135+
scp ~/.codex/auth.json user@remote:~/.codex/auth.json
136+
```
137+
138+
or try this one-liner:
139+
140+
```shell
141+
ssh user@remote 'mkdir -p ~/.codex && cat > ~/.codex/auth.json' < ~/.codex/auth.json
142+
```
143+
144+
#### Connecting through VPS or remote
113145

114146
If you run Codex on a remote machine (VPS/server) without a local browser, the login helper starts a server on `localhost:1455` on the remote host. To complete login in your local browser, forward that port to your machine before starting the login flow:
115147

0 commit comments

Comments
 (0)