コンテンツにスキップ

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 で用途を限定できる スコープ設定が必要

パスワードを送信しない=本質的なメリット

HTTPS: 「私は youremail@example.com でパスワードは xxx です」→ 毎回送信
SSH:   「私はこの秘密鍵の持ち主です(証明のみ、秘密鍵自体は送らない)」

秘密鍵がネットワークを通過しないため、中間者攻撃・フィッシングに強い。

よく使うコマンド

# 鍵ペア生成(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 どちらを使うべきか判断するとき
  • セキュリティ監査で認証方式を説明するとき