GitHub でリポジトリにアクセスする際、コマンドライン認証には HTTPS と SSH の二つの方式がある。
GUIの場合、以下の方法でログイン可能だが、詳細は割愛。
- ブラウザ
- ユーザー名/パスワード
- 二要素認証 (2FA)
- パスキー
- SAML 認証
- GitHub Desktop
- 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 の認証手順
- GitHub CLI でログイン (推奨)
gh auth login
- 手動で HTTPS の認証を行う場合
git clone https://github.com/<OWNER>/<REPO>.git
-
git push
やgit pull
の際に、ユーザー名を入力し、パスワードの代わりに PAT を入力する
-
- 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
を試すことで回避できる場合がある
- GitHubのSSHはポート443でも利用可能
SSH のセットアップ手順
-
SSH キーペアの生成
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-
SSH Agent を起動
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
-
公開鍵 (
~/.ssh/id_rsa.pub
) を GitHub に登録 -
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でも利用可能)
参考