ヘッドレスサーバーでCodexにログインする方法
ブラウザのないサーバーで、デバイスコードログイン、SSHトンネル、auth.jsonのコピー、またはAPIキーを使ってCodex CLIにログインし、スマートフォンからもログインを使える状態に保つ方法。
- CLI
- 0.2.17
- プレビュー ref
- a2c45c8
要点
codex login はマシン上に小さなコールバックサーバーを起動し、ブラウザが localhost に戻ってくるのを待ちます。ヘッドレスサーバーでは、そのブラウザは別の場所にあります。試す順番に並べた選択肢:
- デバイスコード:
codex login --device-auth。どのデバイスでもリンクを開き、ワンタイムコードを入力すれば完了です。先にChatGPTのセキュリティ設定でスイッチをオンにする必要がある場合があります。 - SSHトンネル: ノートPCからポート1455を転送してから
codex loginを実行し、通常のブラウザの流れを完了します。 auth.jsonをコピー: ブラウザのあるコンピューターでサインインし、~/.codex/auth.jsonをサーバーにコピーします。- APIキー: スクリプトやCI向けで、どのみちトークン単位の課金が望ましい場合です。
結果は codex login status で確認します。
問題
よくある構成として、ノートPCがスリープしても長いタスクが続くよう、Codexを小さなLinuxサーバーで動かすことがあります。そこで初めて codex login を実行するとURLが表示されます。ノートPCで開いてサインインすると、最後のリダイレクトがノートPCの localhost:1455 に着きます。そこでは何も待ち受けていないので、サインインはどこにも届きません。
自分のアカウントにどの方法が合うかさえわかれば、解決は簡単です。厄介なのは、手早い方法であるデバイスコードが、設定を変えるまで一部のアカウントではオフになっていることです。
方法1:codex login --device-auth でCodexにログインする
サーバーで:
codex login --device-authCodexがリンクとワンタイムコードを表示します。ノートPCかスマートフォンのブラウザでリンクを開き、ChatGPTにサインインしてコードを入力します。ターミナル側は自動で完了します。サーバーに接続し返す必要がないので、NATの内側やコンテナでも使えます。
知っておくこと:
- スイッチ。 デバイスコードログインは、ChatGPTのセキュリティ設定、またはワークスペース設定で管理者が有効にする必要がある場合があります。コマンドがすぐに失敗するなら、まずそこを確認してください。
- コードの有効期限は短いです。 途中で手が止まったら、古いコードを使い回さずにやり直してください。
- 自分のターミナルが表示したコードだけを入力します。 デバイスコードは、それを要求したターミナルをサインインさせます。誰かから送られてきたコードは、その人のコンピューターをあなたのアカウントにサインインさせる要求です。
方法2:SSHでCodexのログインのコールバックをトンネルする
デバイスコードがオフで変更もできない場合は、通常のブラウザの流れのまま、コールバックをSSHで運びます。ノートPCから:
ssh -L 1455:localhost:1455 you@serverそのSSHセッション内で codex login を実行し、表示されたURLをノートPCのブラウザで開きます。サインインが localhost:1455 にリダイレクトすると、トンネルがサーバー上のCodexプロセスに届けます。
失敗する場合:
- ノートPCでポート1455を他のものが使っていないか確認します。
- 新しく始める前に、サーバー上の古い
codex loginプロセスを終了します。残っているプロセスがポートを握っていることがあります。 codex loginはCodexのログディレクトリにcodex-login.logを書き出します。ブラウザ側とターミナル側の結果が食い違うときに読んでください。
方法3:ブラウザのあるコンピューターからCodexの auth.json をコピーする
ノートPCで codex login でサインインしてから、認証情報ファイルをコピーします。
scp ~/.codex/auth.json you@server:~/.codex/auth.jsonOpenAIはこれをフォールバックとして案内しており、頻繁に作り直すマシンでは便利です。このファイルはパスワードと同じように扱ってください。持っている人なら誰でもあなたのChatGPTアカウントにサインインできます。
ノートPCがCodexの認証情報を auth.json ではなくOSのキーリングに保存している場合、コピーするファイルはありません。cli_auth_credentials_store でファイル保存に切り替える方法はOpenAIのドキュメントに記載されています。
方法4:スクリプトやCIにはOpenAIのAPIキーを使う
printenv OPENAI_API_KEY | codex login --with-api-keyAPIキー認証はOpenAI Platformアカウント経由で標準のAPI料金で課金され、ChatGPTのサブスクリプションとは別です。OpenAIはCIジョブなどのプログラムによるワークフローにこれを推奨しており、ChatGPTのワークスペース機能の一部は使えません。
スマートフォンからもCodexのログインを使える状態に保つ
一度サインインするのは簡単です。難しいのは、留守中にサーバーのログインが期限切れになり、スマートフォンから始めたセッションが何もせず止まっているのを見て初めて気づく、という状況です。
サーバー上のCodexセッションをスマートフォンから開始し、SSHアプリを開かずに状態を確認してコマンドを承認したいなら、HappierはCodex、Claude Codeなどのエージェントをスマートフォン、デスクトップ、Webからクロスデバイスで実行・オーケストレーションできるオープンソースアプリです。
エージェントはあなた自身のコンピューターで動き、スマートフォン、デスクトップ、Webのアプリがそこに接続します。セットアップはスマートフォンからHappierを使う方法にあります。GitHubで公開されており、こちらからダウンロードでき、Discordもあります。
1) サーバーにHappierをインストールしてスマートフォンとペアリングする
curl -fsSL https://happier.dev/install | bash
happier auth login --method mobileスマートフォンのHappierアプリでQRコードを読み取り、承認します。サーバーが、セッションを開始できるコンピューター(Happierでいうマシン)として表示されます。
2) HappierアプリからCodexのログインを確認・更新する
設定(Settings)→ AI とエージェント(AI & Agents)→ AIプロバイダー設定(AI backends)→ Codex を開き、コンテキストバーでサーバーを選んで、認証(Authentication)セクションを確認します。そのコンピューターでCodexがログイン済みかどうかと、どの方法かが表示されます。
ログイン(Log in)または 再認証(Reauthenticate)を押すと、サーバー上で codex login を実行する プロバイダー ログイン端末(Provider login terminal)が開きます。SSH越しの codex login --device-auth など別の方法でログインした後は、今すぐ確認(Check now)で状態を更新します。
3) CodexのログインをHappierに接続済みサービスとして保存する
HappierはCodexのサブスクリプションのログインを接続済みサービスとして保存することもできます。Happierアカウントに暗号化して保存され、あなた自身のデバイスでのみ復号されるので、どのコンピューターのセッションからも使えます。
happier connect codex --device # device-code flow, for a headless box
happier connect codex --paste # fallback: paste the final redirect URL
happier connect codex --api-key # store an OpenAI API key instead--device は方法1と同じデバイスコードのサインインを使うので、同じChatGPTの設定が関係します。--paste は方法2のトンネルなし版です。ノートPCでサインインし、ブラウザが最後に表示したURLをコピーしてターミナルに貼り付けます。その後アカウントが 設定(Settings)→ 接続済みサービス(Connected services)に表示され、Codexのセッションを始めるときに選べます。
制約を一度だけ明記します。サーバーの電源が入っていて、オンラインである必要はあります。Happierはログインの状態をスマートフォンから見えるようにし、直せるようにします。電源の切れたマシンをログイン状態に保つものではありません。
トラブルシューティング
codex login --device-auth がすぐに失敗する
アカウントでデバイスコードログインがオフになっている可能性が高いです。ChatGPTのセキュリティ設定でオンにするか、ワークスペースの管理者に依頼してください。それができない場合は、SSHトンネルか auth.json のコピーを使います。
Codexのログインのブラウザタブが localhost:1455 に届かない
コールバックがノートPCに届こうとしているだけです。SSHトンネルを開いてやり直すか、happier connect codex --paste を使ってアドレスバーのURLを貼り付けます。
codex login status はログイン済みと言うのに、サービスからのCodexセッションが失敗する
サービスが別のユーザーや別のホームディレクトリで動いていて、別の ~/.codex を読んでいる可能性があります。サービスを動かすユーザーでログインするか、ログインを接続済みサービスとして保存し、開始時にセッションが受け取れるようにします。
Codexのリモートコントロールが「ChatGPT認証が必要」と言う
APIキーでサインインしています。リモートコントロールにはChatGPTのサインインが必要なので、方法1、2、3のいずれかを使ってください。
よくある質問
どこにもブラウザがなくてもCodexにログインできる?
APIキーの場合だけです。ChatGPTのサインイン方法はどれも何らかのデバイスのブラウザを使いますが、スマートフォンでも構いません。
auth.json をコピーしても安全?
動作はしますが、パスワードと同じくらい機密性の高いものです。自分のユーザーだけが読めるようにし、コミットしたり共有イメージに含めたりしないでください。
デバイスコードログインはDockerでも使える?
使えます。コンテナにコールバックが戻ってくることがないので、相性がよい方法です。
どのサブスクリプションで使える?
Codexを含むChatGPTのサブスクリプション、またはOpenAIのAPIキーです。どのサブスクリプションにCodexが含まれるかはOpenAIの料金ページに記載されています。