GitにSSHキーを設定する理由:パスワード省略以上の仕組みを理解する
概要¶
「パスワードを毎回入力しなくていいから」だけではない、SSH キーを Git に設定する本当の理由と仕組みを解説。
詳細¶
SSH キー認証の仕組み¶
SSH キーは 公開鍵・秘密鍵のペア。
1. ローカルで鍵ペア生成
ssh-keygen -t ed25519 -C "your@email.com"
→ ~/.ssh/id_ed25519 (秘密鍵: ローカルのみ、絶対に共有しない)
→ ~/.ssh/id_ed25519.pub (公開鍵: GitHub に登録)
2. 認証フロー
① GitHub が「このチャレンジを秘密鍵で署名して」と要求
② ローカルマシンが秘密鍵で署名
③ GitHub が公開鍵で検証 → 一致したら認証成功
HTTPS 認証との違い¶
| SSH キー | HTTPS (PAT) | |
|---|---|---|
| パスワードの扱い | パスワードを送らない | トークンを送る |
| 失効リスク | 秘密鍵が漏れない限り安全 | トークン漏洩のリスク |
| 設定の手間 | 初回のみ | 定期的にトークン更新 |
| CI/CD 向き | Deploy Key で用途を限定できる | スコープ設定が必要 |
パスワードを送信しない=本質的なメリット¶
秘密鍵がネットワークを通過しないため、中間者攻撃・フィッシングに強い。
よく使うコマンド¶
# 鍵ペア生成(Ed25519 推奨)
ssh-keygen -t ed25519 -C "comment"
# 公開鍵を表示(GitHub に登録する内容)
cat ~/.ssh/id_ed25519.pub
# 接続テスト
ssh -T git@github.com
# → Hi username! You've successfully authenticated...
# ssh-agent に秘密鍵を登録(パスフレーズを毎回入力しないため)
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
なぜ重要か / いつ使うか¶
- CI/CD パイプラインで Deploy Key を設定するとき
- チームに Git 設定を教えるとき
- SSH vs HTTPS どちらを使うべきか判断するとき
- セキュリティ監査で認証方式を説明するとき