🤯
GitHubでSSH認証設定方法
GitHubでSSH認証設定方法
問題の発生
今まで個人開発ではHTTPS認証で問題なく使えていたのですが、
Zennの記事を投稿しようと git push
したところ、突然以下のエラーが発生😭
Password for 'https://ghp_xxxxxxxx@github.com':
remote: Invalid username or token. Password authentication is not supported for Git operations.
fatal: Authentication failed for 'https://github.com/[username]/zenn-articles.git/'
原因分析: エラーメッセージの ghp_
で始まる文字列はPersonal Access Token(PAT)。
今回の真の原因はPATの期限切れでした。
個人開発プロジェクトでは問題なくpushできていたため、プロジェクトごとに異なるPATまたは期限の違いが原因と推測されます。
解決方法の選択肢
実は2つの解決方法がありました。
方法A: HTTPS認証を継続
- 新しいPATを作成
- 古いクレデンシャルを削除
- 新しいPATでpush
方法B: SSH認証に移行
- トークンの期限管理が不要
- GitHubの推奨方式
- 一度設定すれば永続的に使用可能
この記事では推奨されているSSH認証方式を採用しました。
1. 現在のSSH設定確認
ls ~/.ssh
SSH鍵がない場合は以下のファイルのみ表示される
-
known_hosts
← 過去にSSH接続したサーバーの記録(セキュリティ機能) -
known_hosts.old
← known_hostsの古いバックアップ
注意: これらのファイルは過去にSSH接続した証拠。
削除しても問題ないが、セキュリティ機能として有用なのでそのまま残すことを推奨。
2. SSH鍵の作成
ssh-keygen -t ed25519 -C "your_email@example.com"
ed25519
について: 楕円曲線デジタル署名アルゴリズムの一種。RSAより高速・安全・コンパクトでGitHubでも推奨されている暗号化方式。
- ファイルの保存場所: そのままEnterを押す(デフォルトでOK)
- パスフレーズ: セキュリティのため設定推奨
- パスフレーズ確認: 同じものを再入力
3. SSH鍵の確認
ls ~/.ssh
以下のファイルが作成されていることを確認
-
id_ed25519
← 秘密鍵(絶対に他人に見せない) -
id_ed25519.pub
← 公開鍵(GitHubに登録する)
4. 公開鍵をGitHubに登録
4-1. 公開鍵をコピー
cat ~/.ssh/id_ed25519.pub
表示される内容(ssh-ed25519 AAAA...
で始まる長い文字列)を全てコピー
4-2. GitHubでの設定
- GitHub.com にログイン
- 右上のプロフィール画像 → Settings
- 左側メニューの SSH and GPG keys
- New SSH key をクリック
- Title: 識別しやすい名前
- Key: コピーした公開鍵を貼り付け
- Add SSH key をクリック
サンプル画像
青色のNEW SSH KEY
ボタンになります。
5. SSH接続テスト
ssh -T git@github.com
初回は以下の確認が表示される
The authenticity of host 'github.com' can't be established.
...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes
と入力してEnter
成功すると以下が表示
Hi [username]! You've successfully authenticated, but GitHub does not provide shell access.
6. リモートURLをSSHに変更
# 現在の設定確認
git remote -v
# HTTPSからSSHに変更
git remote set-url origin git@github.com:[username]/[repository].git
# 変更確認
git remote -v
7. pushテスト
git push origin main
発生した問題:毎回パスフレーズを求められる
pushは成功するが、毎回SSHのパスフレーズ入力を求められるように…🫠
解決方法:SSH-agentでパスフレーズを記憶
# MacのキーチェーンにSSH鍵を追加
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
これで今後はパスフレーズの入力が不要になる😆
確認方法
# 読み込まれているSSH鍵の確認
ssh-add -l
# pushテスト(パスフレーズなしで成功するはず)
git push origin main
コマンドの意味
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
部分 | 意味 |
---|---|
ssh-add |
SSH鍵をメモリに読み込むコマンド |
--apple-use-keychain |
macOSのキーチェーン機能を使用 |
~/.ssh/id_ed25519 |
作成したSSH秘密鍵のパス |
安全性: すべてローカルマシン内で完結し、外部への情報送信はなし
元に戻す方法(必要な場合)
# SSH鍵をメモリから削除
ssh-add -D
# 確認
ssh-add -l
# → "The agent has no identities." と表示されればOK
まとめ
- GitHubはパスワード認証を廃止したため、SSH認証が必要
- SSH鍵は一度設定すれば全プロジェクトで使用可能
- 既存プロジェクトへの影響はなし(個別に変更可能)
- セキュリティが向上し、使い勝手も良くなる
追加メモ
- SSH鍵はコンピュータ全体の設定なので、どのディレクトリで作業しても同じ
- 公開鍵は人に見せても安全、秘密鍵は絶対に秘匿
- 他のGitプロジェクトも同様にSSHに変更可能(任意)
この記事は実際にトラブルシューティングを行った経験をもとに作成しました。
Discussion