Claude Code の /login で OAuth error: timeout of 15000ms exceeded が出る、あるいはブラウザに表示されたコードを貼ったのに Invalid code と言われる場合の切り分けと直し方です。結論から言うと、前者は「ブラウザでの認可は通ったが、そのあとのトークン交換の通信が 15 秒以内に終わらなかった」状態で、障害か、手元の DNS・プロキシが原因のことがほとんどです。後者は、コードの期限切れか、貼り付けで欠けたことが原因で、SSH や WSL2 では特に起きやすい症状です。
確認環境は Claude Code 2.1.322、macOS 26.6.2、2026-11-12 です。
症状
/login のあと、ブラウザで認可まで進めたのに、ターミナルに次のどちらかが出ます。
OAuth error: timeout of 15000ms exceeded
OAuth error: Invalid code. Please make sure the full code was copied
結論
-
timeout of 15000ms exceededは、まず status.claude.com で障害を確認します。障害でなければ、対話画面の/loginではなく、シェルからclaude auth loginを実行します。それでも通らなければ、DNS の変更、ひとつ前の版でのログイン、トークンでのログインを順に試します。 -
Invalid codeは、すぐにやり直して、ブラウザに出たコードを#以降まで含めて全文貼ります。SSH 先では、URL を自分の手元のブラウザで開きます。 - どちらも、公式は専用の節を持っていません。
Invalid codeは Troubleshooting に節があり、timeout of 15000ms exceededは公式のドキュメントに載っていません(_srcを確認した範囲)。以下の対処は、公式の記述と GitHub issue での報告を分けて書きます。
timeout of 15000ms exceeded の意味
この文言は、ログイン処理の通信が 15 秒以内に返ってこなかったときの表示です。
実行ファイルを調べると、ログインのトークン交換の宛先は次の URL でした(2.1.322 の実行ファイルから取り出しています)。手動でコードを貼る場合のリダイレクト先も同じホストです。
つまり、ブラウザで claude.ai にログインできていても、Claude Code が platform.claude.com にトークンを取りに行く通信だけが失敗する、ということが起きえます。ブラウザは通るのにターミナルだけ失敗する、という報告が多いのはこのためだと考えられます(推測)。
issue での報告では、次の 3 つの状況が目立ちました。
- サーバ側の障害と重なった例。2025-10-31(issue #10705、メンテナの回答は「Transient issue, should be resolved.」)、2026-03-11(#33214、#33238)、2026-04-06(#44271)に、同じ文言の報告が一斉に出ています。status.claude.com の更新後に直ったという報告もあります。
- 手元の DNS が名前を引けなかった例。issue #33238 では、当時のトークン交換先
auth.anthropic.comがNXDOMAINになるという報告があり、DNS を1.1.1.1に変えて通ったと書かれています。宛先ホストは版によって違う可能性があるため、いまの版では下の確認コマンドで名前が引けるかを見てください。 - 特定の版でだけ起きた例。同じ issue に、2.1.72 でログインできず、ひとつ前の版に戻したら通ったという報告があります。
issue #33238 は 👍45・コメント 153 件、#33214 は 👍32 で、タイトルに OAuth error を含む issue は 100 件を超えます(私が集めた範囲)。いずれも issue での報告で、公式の対処ではありません。
手元で確かめたこと
タイムアウトそのものは、障害や回線の状態が必要なため再現していません。代わりに、次の 2 点を確かめました。
- 手元の環境では
platform.claude.comの名前が引けること(上の画像 1 つ目のコマンド) - 現行版の実行ファイルに、手動コード貼り付けの案内文字列が入っていること(画像 3 つ目のコマンド)
私の環境ではどちらも問題なく、ログイン自体は通っています。
直し方(timeout of 15000ms exceeded)
1. 障害を確認する
https://status.claude.com を開き、認証まわりのインシデントが出ていないかを見ます。出ている場合は、復旧を待つのが確実です。issue #10705 の公式の回答が、まさに「一時的な問題で、解消済み」でした。
2. 名前が引けるかを確認する
curl -sI https://platform.claude.com | head -1
Could not resolve host が出る、または応答が返ってこないなら、手元の回線の問題です。公式の Troubleshooting(Check network connectivity)は、インストーラ用のホストについて、同じ症状の原因として「社内のファイアウォールやプロキシ」「地域による制限」「TLS の問題」を挙げています。プロキシ越しなら、HTTPS_PROXY を設定してから試します。
export HTTPS_PROXY=http://proxy.example.com:8080
DNS が怪しいときは、1.1.1.1 や 8.8.8.8 に変えて試すと通ることがある、という報告があります(issue #33238)。
3. 対話画面の /login ではなく、シェルから claude auth login を使う
claude auth login
issue #33214 に、claude auth login をターミナルで実行したら通った(macOS、2.1.77)という報告があります。claude auth login --help を見ると、--claudeai(サブスクリプション、既定)と --console(API の従量課金)を選べます。
4. ひとつ前の版でログインする
issue での報告では、2.1.72 でだけ失敗し、ひとつ前の版に戻すと通った例があります。ネイティブ版は古い版のバイナリを残していることがあり、私の環境でも ~/.local/share/claude/versions/ の下に版ごとのファイルが並んでいます。ログインできたら最新に戻します。ただし、これは報告ベースで、公式の手順ではありません。
5. ブラウザを介さずにトークンでログインする
ブラウザ経由のログインがどうしても通らない場合の代替は、公式の Error reference に書かれています。claude.ai のサブスクリプションなら、ログインが通る別のマシンで claude setup-token を実行し、表示されたトークンを、通らない側のマシンの環境変数 CLAUDE_CODE_OAUTH_TOKEN に設定します。サブスクリプションでなければ、Console で発行したキーを ANTHROPIC_API_KEY に設定します。
export CLAUDE_CODE_OAUTH_TOKEN=<setup-token で出たトークン>
トークンはシェルの履歴や共有ファイルに残さないように扱ってください。
やらないほうがよいこと
コミュニティでは、cli.js の timeout:15000 を 45000 に書き換える手が広まりました(issue #33238 のコメント)。ネイティブバイナリには cli.js が無いので、現行のインストール方法では使えません。npm 版でも、更新で元に戻るうえ、公式が認めた方法ではないため、おすすめしません。
Invalid code が出るとき
こちらは公式の Troubleshooting に節があります。「ログインコードが期限切れ、またはコピー時に欠けた」という説明で、対処は次の 3 つです。
- Enter を押してやり直し、ブラウザが開いたらすぐにログインを終わらせる
- ブラウザが自動で開かないときは
cを押して URL 全体をコピーする - リモートや SSH のセッションでは、ブラウザが別のマシンで開いていることがある。ターミナルに表示された URL をコピーして、手元のブラウザで開く
実行ファイルの中身を読むと、貼り付けられた文字列を # で分割し、前半か後半が空なら Invalid code. Please make sure the full code was copied を返す実装になっています(2.1.322 の実行ファイルを読んだ限りの推測で、公式の説明ではありません)。ブラウザに表示されるコードは、コード#状態 のように # を含む長い文字列です。# の前で切れていたり、末尾が欠けていたりすると、この表示になると考えられます。
なお、1 つ目の文言と同じ流れで、貼り付け側が別のサインインのコードだった場合は、別の文言 That code is not from this sign-in. が使われます(実行ファイル内にある文言で、使われる条件は文言からの推測です)。ログインを何度も開き直してコードが混ざったときは、/login をやり直して、最新のブラウザのタブのコードだけを貼ります。
SSH・WSL2・コンテナで、コードを貼るとき
公式の Authentication のページには、次のように書かれています。
If your browser shows a login code instead of redirecting back after you sign in, paste it into the terminal at the
Paste code here if promptedprompt. This happens when the browser can't reach Claude Code's local callback server, which is common in WSL2, SSH sessions, and containers.
つまり、これらの環境では、ブラウザがログイン後にコードを表示するのが正常な動きです。そのコードを、ターミナルの Paste code here if prompted > のところに貼ります。公式の Error reference には、ブラウザに自動で戻せないときの通知(The browser can't return the sign-in to Claude Code automatically)の案内として、「URL をブラウザで開いてサインインし、表示されたコードを Paste code here > のプロンプトに貼る」と書かれています。
手順としては次のとおりです。
- ターミナルで
claude auth loginを実行する - 表示された URL を、手元の PC のブラウザで開く(
cでコピーできます) - ログインを終えると、ブラウザにコードが表示される
- それを全文コピーして、ターミナルのプロンプトに貼る
Paste code here のプロンプトは、手元の実行ファイルには 2 種類入っていました(Paste code here > と Paste code here if prompted >)。画面によって、どちらかが出ます。
直らないとき
- 何度やっても同じ場合は、公式の Troubleshooting にある「Reset your login」をやります。
/logoutで完全にログアウトし、Claude Code を閉じて、もう一度claudeを起動して認証をやり直します。 - 自動化(CI など)でブラウザを使えない環境は、
claude setup-tokenで作ったトークンをCLAUDE_CODE_OAUTH_TOKENに設定する方法が公式の代替です。 -
Couldn't start the local listener that receives the browser sign-inと出る場合は、手元の127.0.0.1で待ち受けできていません。公式は、同じコマンドをもう一度実行し、それでも止まるならトークンか API キーでのログインを案内しています。入力をパイプで渡している場合は、ターミナルで実行します。
同じ原因で出る別のメッセージ
ログインができていないために、あとから次のような表示が出ることがあります。
-
Not logged in · Please run /login、Login expired · Please run /login、OAuth token revoked · Please run /loginは、ログイン状態そのものの問題です。別の記事にまとめています。
-
Invalid API key · Fix external API keyは、環境変数ANTHROPIC_API_KEYが原因のことがあります。
Claude Code で出るほかの英文エラーと、それぞれの対処は、早見表にまとめています。
参考
- 公式 Troubleshooting(OAuth error: Invalid code): https://code.claude.com/docs/en/troubleshoot-install#oauth-error-invalid-code
- 公式 Troubleshooting(Check network connectivity): https://code.claude.com/docs/en/troubleshoot-install#check-network-connectivity
- 公式 Authentication(Log in to Claude Code): https://code.claude.com/docs/en/authentication
- 公式 Authentication(長期トークンの作成): https://code.claude.com/docs/en/authentication#generate-a-long-lived-token
- 公式 Error reference(Couldn't start the local listener that receives the browser sign-in): https://code.claude.com/docs/en/errors#couldnt-start-the-local-listener-that-receives-the-browser-sign-in
- issue #33238(auth.anthropic.com が引けない・版を戻して直った報告): https://github.com/anthropics/claude-code/issues/33238
- issue #33214(
claude auth loginで通った報告): https://github.com/anthropics/claude-code/issues/33214 - issue #10705(2025-10-31 の障害、メンテナの回答): https://github.com/anthropics/claude-code/issues/10705
- issue #44271(2026-04-06 の障害): https://github.com/anthropics/claude-code/issues/44271
