🌬️

GitHubのHTTPSとSSH通信の認証方法の違い

2025/02/14に公開

GitHub でリポジトリにアクセスする際、コマンドライン認証には HTTPSSSH の二つの方式がある。
GUIの場合、以下の方法でログイン可能だが、詳細は割愛。

  1. ブラウザ
    • ユーザー名/パスワード
    • 二要素認証 (2FA)
    • パスキー
    • SAML 認証
  2. GitHub Desktop
  3. API (OAuth, Personal Access Token, GitHub Apps)

1. HTTPS 認証

  • 認証方式: PAT (Personal Access Token)
  • 通信の暗号化: TLS/SSL
  • 初回のみPATを使用
  • 一般ユーザー向けでセットアップが簡単
  • 企業ネットワーク環境などでファイアウォールの制約を受けにくい
  • GitHub CLI で統合可能 (gh auth login で PAT を自動管理できる)
    • gh auth login を使えば、PAT を手入力する必要がなくなる
  • デメリット
    • PATをURLに直接含めると、CI/CD のログなどに記録される危険性がある
    • PAT を毎回入力する必要がある(Git の credential-store を利用すれば回避可能)
    • PAT の管理が必要(定期的な更新が必要)

HTTPS の認証手順

  1. GitHub CLI でログイン (推奨)
    gh auth login
  2. 手動で HTTPS の認証を行う場合
    git clone https://github.com/<OWNER>/<REPO>.git
    • git pushgit pull の際に、ユーザー名を入力し、パスワードの代わりに PAT を入力する
  3. PAT を環境変数で管理 (セキュリティ対策)
    export GITHUB_TOKEN="ghp_xxxxxx"
    git clone https://$GITHUB_TOKEN@github.com/<OWNER>/<REPO>.git

2. SSH 認証

  • 認証方式: 公開鍵暗号化方式
  • 通信の暗号化: SSH
  • GitHubに初回登録すれば認証の手間がなくなる
  • 秘密鍵が流出しない限り安全
  • SSH Agentを使用すると、CI/CD などのリモート環境でもGitが使用可能
  • デメリット
    • 初回セットアップが必要(SSH キーペアを生成し、GitHub に登録する)
    • ポート22 のため、ファイアウォールの影響を受ける可能性がある
      • GitHubのSSHはポート443でも利用可能
        ssh -T -p 443 git@ssh.github.comを試すことで回避できる場合がある

SSH のセットアップ手順

  1. SSH キーペアの生成
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  2. SSH Agent を起動
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa

  3. 公開鍵 (~/.ssh/id_rsa.pub) を GitHub に登録

  4. SSH 接続テスト
    ssh -T git@github.com

    成功すると以下のメッセージが表示される:
    Hi <USERNAME>! You've successfully authenticated, but GitHub does not provide shell access.

3. HTTPS と SSH の比較表

項目 HTTPS SSH
認証方式 Personal Access Token (PAT) 公開鍵認証
通信の暗号化 TLS/SSL (HTTPS) SSH プロトコル
認証の手間 gh auth login で簡単に管理できるが、PAT の定期更新が必要 一度設定すればその後は不要
セキュリティ PAT の管理が必要 秘密鍵が安全なら高セキュリティ
CI/CD の対応 PAT を環境変数に持たせるなどの管理が必要 SSH Agent を利用可能
ファイアウォールの影響 ほぼ受けない(ポート 443) 企業ネットワークではポート 22 がブロックされる可能性あり
利用対象 一般ユーザー向け、セットアップが簡単 開発者・CI/CD向け、セキュリティ重視

4. どちらを使うべきか?

用途 おすすめの認証方式
セットアップを簡単に済ませたい HTTPS
セキュリティを重視したい SSH
CI/CD 環境での認証を簡単にしたい SSH
企業ネットワークで使用する HTTPS (SSHはブロックされる可能性あり)
2要素認証を有効化している SSH
一度セットアップして、以降楽に使いたい SSH

5. まとめ

  • HTTPS のメリット

    • 簡単にセットアップ可能
    • 企業のネットワークでも制約を受けにくい
    • gh auth login を使えば、認証を自動化できる
  • HTTPS のデメリット

    • PAT の管理が必要(定期的な更新)
    • セキュリティ面で SSH に劣る
  • SSH のメリット

    • 一度セットアップすれば、その後の認証が不要
    • セキュリティが高く、CI/CD での管理が楽
  • SSH のデメリット

    • 初回セットアップが必要
    • 企業のファイアウォールでポート22がブロックされる可能性がある(ポート443でも利用可能)

参考

https://zenn.dev/nameless_sn/articles/the_differences_between_https_and_ssh

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/about-authentication-to-github

https://cli.github.com/manual/gh_auth_login

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

Discussion