GitHub Actions:「fatal: could not read Username for 'https://github.com'」
git がそのリクエストに使う認証情報を持っておらず、ユーザー名を聞こうとしましたが、CI のジョブには聞く相手がいません。すぐ上の行が warning: redirecting to なら、トークンはあったのに git が捨てています。これは2026年10月から起きていて、1つ目の節で扱います。その行が無ければ「ほかの原因」へ進みます。
見え方
warning: redirecting to https://github.com/<org>/<repo>/ fatal: could not read Username for 'https://github.com': terminal prompts disabled
runner-images #15014 からです。最後のコロンのあとは、git の起動のしかたで変わります。GIT_TERMINAL_PROMPT=0 なら「terminal prompts disabled」、端末が無ければ「No such device or address」です。push ならさらに failed to push some refs、git ls-remote なら fatal: expected flush after ref listing が続きます。
1. URL のトークンが、curl のセキュリティ更新のあとで捨てられる
リダイレクトは起きていません。Ubuntu の バグ 2171054 に説明があります:
- curl の CVE-2026-94266 の修正(curl 8.23.0、Ubuntu では 24.04 の
8.5.0-2ubuntu10.16と 22.04 の7.81.0-1ubuntu1.30)で、libcurl は取得した URL を、ユーザー名とパスワードを取り除いた形で返すようになりました。 - 2.56.0 までの git は、それを自分が頼んだ URL と文字列のまま比べ、リダイレクトされたと判断し、認証情報を取り除いた URL で警告を出し(だから最後に
/が付きます)、トークンの無いその URL からやり直します。 - トークンを URL に書くものはすべて当たります。リモートの
https://${TOKEN}@github.com/...、url.<base>.insteadOfの設定、そういう URL を作るツール(semantic-release #4321、pr_comet #505)です。
出る場所:
- GitHub がホストする Ubuntu のランナー。GitHub は Ubuntu 22.04・24.04・26.04 と
ubuntu-slimで再現し、10月22日にイメージを戻すと決めました。同じ issue のコメントには、Azure Pipelines の Microsoft がホストする Ubuntu のエージェントでも同じだという報告があります(Azure DevOps での同じメッセージ)。10月26日に出たubuntu-24.04のイメージ(20261026.354)には curl8.5.0-2ubuntu10.16と Git 2.56.0 が並んでいて、git 側の直し(76524c2604・9月28日)は 2.56.0 に入っていません。commonmark のドキュメントのワークフローは、10月26日の夜間の実行でこれで失敗しました(commonmark #1167)。 - 新しい curl と古い git のコンテナやセルフホストのマシン。Ubuntu 自身の git のパッケージは10月19日から直しを含むので(24.04 は
1:2.43.0-1ubuntu7.4、22.04 は1:2.34.1-1ubuntu1.18)、Ubuntu からapt-get install gitした git は大丈夫です。ランナーのイメージが使う git-core PPA の 2.56.0(10月23日)は、変更点に新しい上流のリリースとしか書いていません。
先にトークンを作り直さないでください。PX4 の同期のジョブは10月19日から失敗し、トークンが疑われましたが(PX4 #29520)、本当の直しに新しいトークンは要りませんでした(PX4 #29528)。
いま効く直し方
- トークンを URL でなく、認証情報ヘルパーで git に渡す。PX4 は認証情報なしでクローンし、
ghに答えさせるようにしました:- run: | gh auth setup-git git clone https://github.com/owner/private-repo.git env: GH_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}トークンはコマンドラインにも.git/configにも残りません。 - ヘッダーで送る。
actions/checkoutはもともとこうしているので、checkout 自身の取得は影響を受けません。自分のリポジトリなら、checkout のtoken:でそのあとの push も足ります。ほかのコマンドでは:git -c http.https://github.com/.extraheader="AUTHORIZATION: basic $(printf 'x-access-token:%s' "$TOKEN" | base64 -w0)" \ clone https://github.com/owner/private-repo.git
- すぐ直すなら、トークンをパスワードの位置に置く:
https://x-access-token:${TOKEN}@github.com/。GitHub のランナーのイメージの担当は、トークンをユーザー名に置く形が失敗したどのイメージでも、これで通ったとしています。Gradle も更新のスクリプトをこの形に変えました(gradle #39697)。ただ、Ubuntu のバグ報告には、ユーザー名とパスワードの URL が別の種類のサーバーで失敗する例があるので、長く使うなら上の2つのどちらかにします。
curl のパッケージを古いまま止めても消えますが、セキュリティの修正が入らないままになります。
ほかの原因(「redirecting to」の行が無い)
- checkout がトークンを保存していない。
persist-credentials: falseだと、あとのgit fetchやgit pushは送るものがありません。公開のリポジトリは認証なしで取得できるので、失敗するのはプライベートと internal のリポジトリだけです(tooling-configs #76)。 - 別のプライベートのリポジトリ:Go のモジュール、git の依存、サブモジュール。
GITHUB_TOKENはワークフローのあるリポジトリにしか届かないので、そのリポジトリ用のトークンが要ります(spectrum-x-operator #355)。 - シークレットが空。フォークからの実行にはシークレットが渡らず、Dependabot の実行には Dependabot のシークレットしか渡らないので、
https://${TOKEN}@github.com/はトークンの無い URL になります。
見分け方
remote: Permission to owner/repo.git denied to github-actions[bot]と 403:git はトークンを送り、そのトークンが書き込めませんでした(「Permission to ... denied to github-actions[bot]」)。refusing to allow a GitHub App to create or update workflow:トークンは送られ、push がワークフローのファイルを変えています(「refusing to allow a GitHub App to create or update workflow」)。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Permission to ... denied to github-actions[bot]」 · 「refusing to allow a GitHub App to create or update workflow」 · 「The ubuntu-latest label will migrate to Ubuntu 26」 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English