gh auth statusは成功。でもPushでつまずいた。WSLとCodexの実行条件を比べた

GitHub CLIを使っていて作業中に少しつまずいたことがあった。WSLではgh auth statusが通るのに、Codexでは「トークンが無効」と出た時でした。
ブラウザー認証をやり直しても表示が食い違ったので、実行条件を比べました。

「認証が無効」の前に、GitHubへ届いているかを見る

手元のWSLでは、次の読み取り確認が成功していました。

gh auth status --hostname github.com
gh api user --jq .login

どちらもWSL2の/usr/bin/ghと同じ資格情報ファイルを使っていました。一方、通信を制限したCodexの実行ではgh auth statusが無効と表示され、gh api userもerror connecting to api.github.comで失敗しました。
同じ実行ファイルと資格情報を使った通信許可後の別実行では、gh api userが想定していたアカウントを返しました。

この比較では、通信条件を変えると同じトークンで通りました。表示だけでトークンの失効とは決められませんでした。

gh auth statusが通っても、git pushは別に見る

その後、ブラウザー認証を行い、私のWSLではgh auth statusが成功しました。それでもPushの準備は一度に進みませんでした。git addはCodexの実行環境が.git/index.lockを書けずにRead-only file systemで失敗し、書き込みを許可した後に進みました。

Push直前にも止まりましたが、GitHubサーバーから認証エラーが返ったわけではありません。Codexの自動承認レビューがgit pushを止めていました。
対象リポジトリのremoteはSSH形式だったため、実際のPushではghのトークンではなくSSHの認証経路を使う。PRの作成にはGitHub連携を使いました。

つまり今回止まった場所は、それぞれ別でした。

  • gh auth statusやgh apiで見る、GitHub CLIの認証とAPI通信
  • git pushが使うremoteの接続方式とSSH認証
  • Codexの実行環境から.gitへ書き込めるか
  • Codexの実行承認が操作を許可するか

次に同じ表示が出たら、失敗した場所から確かめる

  1. どのコマンドが失敗したか見る。 gh apiなのかgit pushなのか、AIエージェントの承認で止まったのかを分ける。
  2. ghのある環境から通信を試す。 gh auth status --hostname github.comに加えて、読み取り専用のgh api user --jq .loginを実行する。接続エラーなら、再ログインより先にその実行環境のネットワーク条件を確かめる。
  3. Gitのremoteを見る。 git remote -vがHTTPSかSSHかを確認する。gh auth statusの認証成功だけでは、SSH接続やGitHubへの書き込み権限は確認できない。
  4. ローカル側で止まっていないか見る。 .gitへの書き込みエラーと、Codexなどの操作承認は、GitHubの認証とは別に扱う。

gh auth refreshは、保存済みの認証に必要な権限スコープを追加・調整するコマンドです。スコープ不足が分かった時に使い、ログイン自体が必要な場合はgh auth loginを使います。エラーの原因が分からないまま、どちらも繰り返すのは避けたいです。

失敗した場所から通信・認証、必要な時だけの再認証、Git接続方式、権限と実行ルールを確認する流れ
失敗した場所から通信・認証・Gitの接続方式・実行権限を確かめ、必要な場合だけ再認証へ進みます。

GitHub CLIの導入、WindowsとWSL2での使い分け、IssueやPull Requestを見る基本コマンドは、GitHub CLIをWindowsとWSL2に入れて、IssueとPRを確認するに分けました。

私がAIに期待していたのは、エラーを見てすぐ再ログインを案内することではありません。どのコマンドがどの実行環境で止まったかを読み取り専用の確認から調べ、同じ失敗を繰り返さないことです。人の操作が必要なら、何をなぜ実行するのかを絞って伝えてほしい。今回のように「認証が無効」と「Pushが止まった」を分けるだけでも、次に見る場所は変わります。

確認した公式情報

後の実行でまた無効と出たこともあり、当時の食い違いの原因は一つには特定していません。今は使えているので、その時につまずいた記録として残しています。

コメント

タイトルとURLをコピーしました