◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Cowork
◈ Cowork/2026-10-16上級

トークンを URL に埋め込む git の書き方が、ある日の定期タスクで通らなくなりました

git clone が「could not read Username」で止まりました。トークンを URL に埋める2つの書き方で結果が分かれ、askpass に切り替えるまでの記録です。

Cowork47git18GitHub7認証7定期タスク

✦ プレミアム記事

個人開発で運用している Web サイトのリポジトリを、定期タスクで更新しています。ある日、そのタスクが最初の clone で止まりました。ログに残っていたのは、この 2 行だけです。

fatal: could not read Username for 'https://github.com': No such device or address
fatal: expected flush after ref listing

同じ日の午前に走った別のタスクでは、push まで通った記録が残っています。何が変わったのかは、今も特定できておりません。ただ、止まった理由そのものは切り分けられました。ここでは、その過程と、最終的に落ち着いた認証の渡し方を書き残します。

結論を先にお伝えします。トークンだけを URL に埋め込む書き方(https://トークン@github.com/…)は、この環境では通らず、ユーザー名を足した書き方(https://x-access-token:トークン@github.com/…)は通りました。 そして、通る方の書き方にも、設定ファイルにトークンが残るという別の問題があります。

何が起きていたのか

「Username を読めない」と言われても、URL にはトークンが入っています。メッセージが当たっていない気がして、git が実際に送った通信を見ることにしました。

# 通信の要点だけを取り出す(トークン本体は git 側でも伏せられます)
GIT_TRACE_CURL=1 GIT_TRACE_CURL_NO_DATA=1 \
  git ls-remote "https://トークン@github.com/OWNER/REPO.git" HEAD 2>&1 \
  | grep -E "Send header: (GET|authorization)|Recv header: HTTP|redirecting|fatal"

トークンだけを埋めた書き方では、次の順に通信していました。

=> GET /OWNER/REPO.git/info/refs?service=git-upload-pack
<= HTTP/2 401
=> GET /OWNER/REPO.git/info/refs?service=git-upload-pack
=> authorization: Basic <伏せ字>
<= HTTP/2 200
warning: redirecting to https://github.com/OWNER/REPO.git/
<= HTTP/2 401
fatal: could not read Username for 'https://github.com'

1 回目の 401 のあとで認証つきの再送が通り、200 が返っています。その直後に git が「redirecting」と警告し、3 回目の要求では authorization ヘッダーが付いていません。 3 回目が 401 になり、Username を尋ねる段階で端末がないために止まった、という流れです。

ユーザー名を足した書き方では、同じ警告が出ても、3 回目に authorization が付いて 200 が返りました。

URL の書き方要求の流れ結果
トークンだけ401 → 200 → (警告)→ 認証なしで 401失敗
ユーザー名:トークン401 → 200 → (警告)→ 認証つきで 200成功

なぜ前者だけ認証が落ちるのか、「redirecting」の警告がどこから来るのかは、まだ確かめておりません。URL を見ただけでは、リダイレクトを返したのが GitHub なのか、手前の経路なのかも分かりませんでした。確かめられたのは、書き方ひとつで、同じ警告のあとに認証が残るか落ちるかが分かれるという点です。使った git は 2.34.1 です。

6 つの渡し方を並べる

通る書き方を見つけて終わりにしてもよかったのですが、今度はトークンの置き場所が気になりました。手順書には git remote set-url origin https://トークン@github.com/… と書いてあり、これはトークンを .git/config に書き込みます。そこで、渡し方ごとに、通るか、どこに残るかを手元で確かめました。ダミーのトークンで、設定ファイルと実行中のプロセス一覧を見ています。

渡し方通ったか設定ファイルに残るか実行中の引数に出るか
URL にトークンだけ失敗remote に設定すれば残る(ユーザー名つきと同じ仕組み)URL を引数に渡せば出る
URL にユーザー名:トークン成功残る(git remote -v にもそのまま出る)出る
http.extraHeader成功残らない出る(Base64 は 1 行で戻せる)
GIT_ASKPASS(環境変数でトークン)成功残らない出ない(環境変数には載る)
GIT_ASKPASS(トークンはファイルから)成功残らない出ない(環境変数にも載らない)
credential.helper store保存の確認のみ平文のファイルに残る(権限は 600)未計測

意外だったのは、よく見かけるトークンだけの書き方が、この表の中で唯一通らなかったことです。そして、通ってかつ何も残さないのは、いちばん書くのが面倒な 5 行目の渡し方だけでした。

extraHeader の Base64 は、読み取れる形です。実際にプロセス一覧で見えた文字列を戻してみると、x-access-token: に続いてトークンがそのまま出てきます。暗号ではなく、書き換えにすぎないと考えるほうが安全です。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦定期タスクの git が認証で止まったとき、通信の記録を3行たどって、URL の書き方が原因かどうかを切り分けられるようになる
✦トークンを設定ファイルにも引数にも残さずに git を呼ぶ、10 行ほどのラッパーを自分の環境へ移せるようになる
✦手元のリポジトリのうち、URL にトークンを埋め込んだままのものを、読み取り専用のスクリプトで先に洗い出せるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ Cowork2026-10-15
一覧には見えているのに、名前で探すと0件——日本語ファイル名の「濁点が分かれている」問題を数えました
Cowork に渡した作業フォルダで、日本語名のファイルが名前検索に当たらない。約1.9万件を数えると、濁点・半濁点が分かれた名前が17件ありました。数え方と直し方を書き残します。
◈ Cowork2026-10-14
Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
Cowork に頼むたびに同じ注意を書き直していた私が、フォルダの先頭に CLAUDE.md を一枚置いて落ち着いた手順の記録です。書く三つの項目、読まれているかの確かめ方、書きすぎたときの戻し方まで、非エンジニアの方でも追える順番で並べました。
◈ Cowork2026-10-11
つまづき集を毎回全文読ませるのをやめて、番号で一節だけ引くようにしました — 約105KBが約1.5KBになった記録
Web サイト運用のつまづきを書き溜めたメモ(約105KB)を、番号で一節だけ引く仕組みに変えた記録です。最初の抽出スクリプトは120番号のうち30しか引けず、#70 は0バイトを返しました。直した awk と、節の大きさの実測値を残しています。