ページ内に広告が表示される場合があります

GitHub認証、生成AIに騙されてPAT使ったら遠回りした話

生成AIに騙されてGitHub認証遠回り 技術系

おまけ

この記事を書いてる最中に「む? またGitHub落ちた?」ってなった。

Google, Amazon, Claude, ChatGPT, Gemini, YouTube はつながる。
GitHub, Slack, ABEMA, TVer そしてこのブログはつながらない。

折角だから追跡してみよう!ということで mtr コマンドを試みた。

# dnf install mtr
Error: Error downloading packages:
  Curl error (28): Timeout was reached [Connection timed out after 30001 milliseconds]

チーン。そっちも落ちてた。

気を取り直して本題へ。

TL;DR

GitHubのSSH認証を設定したかっただけなのに、生成AIと検索結果に Fine-grained personal access tokens(PAT)を勧められて遠回りした。
Git操作の認証にPATを使うのはそもそも用途が違った。
結論はSSH鍵一択。

発端

久々に環境を作ってGitリポジトリをcloneしようとしたらID/PASSを聞かれて、入力しても認証失敗。

パスワードは2021年8月に廃止。

じゃあどうすんだっけ?

調べたらPATの情報ばかり。

生成AIに聞いても同じ答え。

新しいからやってみようと思い情報に従う。

認証成功!

・・・と思いきや、clone/pull するたびにID/PASSを聞かれる・・・。

どうしたらいい?

git config --global credential.helper store で認証キャッシュ

生成AI様の助言に素直に従う。

credential storeの何が問題か

store にした場合、トークンはどこに保存されるんだと疑問に思って調べたら、~/.git-credentials に平文で保存されてた。

https://<username>:<PAT>@github.com

まあ ~/.ssh/id_ed25519(SSH秘密鍵)も平文だし、「秘密情報をローカルファイルに置く」という構造は同じなんだけど…。

~/.git-credentialsファイルパスも形式も規格化されている。つまりマルウェアが狙いやすい。「ここを見ればトークンが取れる」とわかっているファイルが存在するのはなんか気持ち悪い。

それよりなにより、後で知ったんだけどそもそもPATはgit操作の認証に使うものじゃなかった

正解はSSH鍵だった

生成AIと議論して結局「SSH鍵が最善」という話になった。最初からそう言ってほしかった。

PAT + credential store は「HTTPS必須の環境」「GitHub APIを叩く」「GitHub Actions」のような用途向けの話で、git操作の認証にPATを使うのは本来の使い方じゃない。

でも検索結果も生成AIも、学習データの多数派がそっちなので自然とPAT+HTTPSの話から始めてしまう。

SSH鍵の設定手順

1. SSH鍵を生成

ssh-keygen -t ed25519

ファイル名を聞かれるので、デフォルト(~/.ssh/id_ed25519)のままEnterでOK。

パスフレーズは今回は省略。

2. 公開鍵をGitHubに登録

cat ~/.ssh/id_ed25519.pub

出力された内容(ssh-ed25519 AAAA... から始まる1行)をコピーして、GitHubに登録する。

GitHub > Settings > SSH and GPG keys > New SSH key

項目内容
Title任意(例:my-pc
Key typeAuthentication Key
Key.pubの中身をそのまま貼り付け

3. 接続テスト

ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

これが出ればOK。

4. SSH URLでclone

git clone git@github.com:username/repo.git

以降、認証を聞かれることはなくなる。

ハマりポイント:~/.ssh/config は自動生成されない

鍵のファイル名をデフォルト(id_ed25519)以外にした場合、~/.ssh/config で「このホストにはこの鍵を使え」と明示的に設定する必要がある。

これを知らずに github_mykey みたいな名前にしたら、gitはデフォルトの id_ed25519 を探して認証失敗した。

~/.ssh/config手動で作るものssh-keygen は鍵ペアを作るだけで、configは生成しない。

cat > ~/.ssh/config << 'EOF'
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_mykey
EOF

chmod 600 ~/.ssh/config

素直にデフォルトのファイル名(id_ed25519)にしておけばconfig不要で動く。今となってはそうすればよかったと思う。

まとめ

git clone / git pull したいだけなら、SSH鍵一択。 PATは必要ない。

生成AIに聞くと「PATを発行して〜」という情報が多数派なので同じ答えが返ってくる。でもそれはHTTPS前提の話で、CLIでgit操作するだけなら最初からSSH鍵を使うのが定石だった。

コメント

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