
Contents
SSH認証に切り替えると、全部解決した
`git push` でつまったとき、原因が1つとは限りません。
今回は3つが重なっていました。
- 『macOSキーチェーンの古い認証情報』が邪魔をしていた
- 『トークンURLに特殊文字』が含まれてシェルが誤作動した
- 『リポジトリ名変更後のリモートURL更新忘れ』が重なった
何を試しても効かなかった理由は、問題を1つずつ潰そうとしていたからです。
解決したのは、根本を変えたとき——HTTPSからSSHに切り替えた瞬間でした。
SSH設定は5ステップです。
```bash
# 1. SSHキーを生成する
ssh-keygen -t ed25519 -C "メールアドレス" -f ~/.ssh/id_ed25519 -N ""
# 2. 公開鍵を表示してコピーする
cat ~/.ssh/id_ed25519.pub
3. GitHubの設定画面(Settings > SSH and GPG keys > New SSH key)に公開鍵を貼り付けて登録する
```bash
# 4. リモートURLをSSH形式に変更する
git remote set-url origin git@github.com:ユーザー名/リポジトリ名.git
# 5. 接続確認
ssh -T git@github.com
# Hi ユーザー名! You've successfully authenticated.
一度設定すれば、以降は `git push` だけで完了します。トークンの入力は不要です。
pushするだけのはずが、1時間格闘していた
ブログ記事をMarkdownで管理するリポジトリを作っていました。
リポジトリ名を `my-blog` から `engineer-diary` に変えて、GitHubにプッシュしようとした。それだけのつもりでした。
ところが、ターミナルに赤いエラーが出るたびに調べて、試して、また別のエラーが出る。
「なんで動かないんだ」と思いながら、気づいたら1時間経っていました。
原因は1つではありませんでした。
3つのエラーが重なっていた
ひとつめは、『macOSキーチェーンの古い認証情報』です。
GitHubはパスワードでのログインを廃止しています。代わりに『PAT(個人アクセストークン)』が必要です。ところがmacOSのキーチェーンには、古いパスワードが残ったまま自動送信されていました。
新しいトークンを入力しても、キーチェーンが上書きして古い情報を優先する——これが最初の詰まりどころでした。
ふたつめは、『トークンURLの特殊文字による誤作動』です。
トークンをURLに直接埋め込む方法を試しました。
```bash
git remote set-url origin https://ユーザー名:トークン@github.com/...
```
ところがトークンに `@` が含まれていたため、シェルが途中で区切ってしまいました。
```
zsh: no such file or directory: om/ユーザー名/engineer-diary.git
```
`github.com` の `@` 以降が別の引数として解釈されてしまった、ということです。
```
みっつめは、『リポジトリ名変更後のURL更新忘れ』です。
`my-blog` → `engineer-diary` に変えたとき、ローカルのリモートURLが古いままでした。これが重なって、認証が通らない原因の一つになっていました。
GitHubの認証でハマりがちな4パターン
1. キーチェーンに古い認証情報が残っている(macOS特有)
2. PATの存在を知らず、パスワードでpushしようとしている
3. トークンURLに特殊文字が混ざっていてシェルが誤作動する
4. リポジトリ名変更後にリモートURLを更新し忘れる
ポイントは、『これらが重なることがある』という点です。
1つ解決しても次のエラーが出るときは、複数の問題が同時に起きていると疑うのが正解だと思います。
・
git remote -v を実行したとき、URLは https:// と git@ のどちらで始まっていますか?
まず1つだけやってみるとしたら
今日やることは1つだけです。
ssh-keygen -t ed25519 を実行して、SSHキーを1本作る
SSH設定は一度やれば終わりです
もし今もHTTPSで `git push` しているなら、SSHに切り替えておいて損はないと思います。
認証の手間が減ると、作業のリズムが少し変わります。
まとめ:原因が1つとは限らない、という話
今回の失敗からの教訓はシンプルです。
`git push` でつまったとき、原因は1つとは限りません。今回は3つが重なっていました。
『複数の問題が重なっているなら、根本から変えたほうが早いことがある』——SSHに切り替えることで学んだことです。
GitHubを使うなら最初からSSHにしておくのが、推測ですが正解に近いと思っています。
同じ沼にはまる人が1人でも減れば、この記録を残した意味があります。
