Codex CLIを自宅のLinuxマシン(非GUI環境)で使おうと思ったときに少しだけ躓きましたので備忘録です。
通常のログインフロー
手元の端末(画面付き)で、「Sign in with ChatGPT」を選択するとブラウザでChatGPTのログイン画面が表示されます。ここでログインをすると
このようにブラウザに認証画面が自動起動し、ここでログインをすることでCodex CLIにChatGPTでログインできるのが通常です。
ヘッドレス環境でログインをしようとすると困ること
当然画面がないのでログイン画面が表示されません。
ターミナルに表示されたURLをクリックすると、手元のブラウザで認証画面が表示されますが、ここでログインをしても正常に接続先のサーバのcodex cliにトークンが渡らず、認証が完了しません。
これはcodex cliが自動で表示する認証リンクのredirectURIが接続先サーバではなく、localhost(手元の端末)を指しているためです。
じゃあどうするか
結論:
以下コマンドを手元の画面付き端末で実行、 localhost:1455 → (サーバのIPアドレス):1455 でsshトンネルを張った上で、認証リンクを手元の端末で開き認証をします。
ssh -fnNT -L 1455:<サーバIPアドレス>:1455 -i <秘密鍵> <サーバユーザー名>@<サーバのIPアドレス>
なぜそれで上手くいくか
Codex CLIはlocalhost:1455をredirectURIとして利用します。(少なくとも私の環境ではそのようです)
今回の状況だとCodex CLIは<サーバのIPアドレス>:1455でTokenを受け付けている状態です。
認証リンクのredirectURIはlocalhost:1455(今回の状況なら手元の端末)ですから、逆に言えばここに来たアクセスを<サーバのIPアドレス>:1455に転送してやれば、サーバ上で動いているCodex CLIは無事トークンを受け取ることができるわけです。
先ほどのsshコマンドはその転送をさせるトンネルを張るために実行しました。
おわり
AIが便利な世の中ですが、ひょんなところで地味な知識が役立つととても嬉しいものですね。

