第5章 認証とセキュリティ
Git と GitHub を安全に使うためには、認証の仕組み をしっかり理解しておく必要があります。
管理者として、チームメンバーに適切な認証方法を案内し、セキュリティポリシーを設計しましょう 🔐
5.1 SSH鍵の生成と管理
Section titled “5.1 SSH鍵の生成と管理”なぜ SSH を使うの?
Section titled “なぜ SSH を使うの?”HTTPS でも GitHub に接続できますが、SSH を使うと以下のメリットがあります。
| 項目 | HTTPS | SSH |
|---|---|---|
| 認証方法 | ユーザー名 + トークン | 鍵ペア(公開鍵 + 秘密鍵) |
| 毎回の入力 | トークンが必要(※キャッシュ可) | 不要(鍵で自動認証) |
| セキュリティ | トークン漏洩リスク | 秘密鍵が手元にある限り安全 |
| ファイアウォール | 通常は問題なし | ポート22がブロックされる場合あり |
flowchart LR
subgraph "あなたのPC"
SK["🔑 秘密鍵
(~/.ssh/id_ed25519)
絶対に共有しない!"]
end
subgraph "GitHub"
PK["🔓 公開鍵
(GitHub に登録)
誰に見られてもOK"]
end
SK -- "秘密鍵で署名 →" --> PK
PK -- "← 公開鍵で検証" --> SK
style SK fill:#FFEBEE,stroke:#E53935,color:#B71C1C
style PK fill:#E8F5E9,stroke:#43A047,color:#1B5E20
SSH鍵の生成
Section titled “SSH鍵の生成”# Ed25519(推奨)で鍵を生成ssh-keygen -t ed25519 -C "taro@example.com"
# 対話的に聞かれる内容# Enter file in which to save the key: (Enterでデフォルト)# Enter passphrase: (パスフレーズを設定。空でも可だが推奨しない)# 生成されるファイル~/.ssh/id_ed25519 # 秘密鍵(絶対に公開しない!)~/.ssh/id_ed25519.pub # 公開鍵(GitHub に登録する)GitHub に公開鍵を登録
Section titled “GitHub に公開鍵を登録”# 公開鍵の内容をコピーcat ~/.ssh/id_ed25519.pub# macOS ならクリップボードに直接コピーpbcopy < ~/.ssh/id_ed25519.pubGitHub の Settings → SSH and GPG keys → New SSH key で登録します。
ssh -T git@github.comHi taro-yamada! You've been authenticated, but GitHub does not provide shell access.このメッセージが表示されれば成功です 🎉
複数アカウントの管理
Section titled “複数アカウントの管理”仕事用と個人用など、複数の GitHub アカウントを使い分けたい場合。
# 仕事用Host github-work HostName github.com User git IdentityFile ~/.ssh/id_ed25519_work
# 個人用Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519_personal# 使い分け(リモートURLを変更)git remote set-url origin git@github-work:company/repo.git5.2 GPG署名付きコミット
Section titled “5.2 GPG署名付きコミット”なぜ署名が必要?
Section titled “なぜ署名が必要?”Git のコミットでは user.name と user.email を自由に設定できます。
つまり、誰でも他人になりすましてコミット できてしまいます。
GPG 署名を使うと、「このコミットは確かに本人が作った」 ことを証明できます。
flowchart LR
A["署名なしコミット
誰でも名乗れる 😰"] --> B["本当に Taro さん?"]
C["署名付きコミット ✅
GPG鍵で証明"] --> D["確かに Taro さん!
(Verified バッジ)"]
style A fill:#FFF9C4,stroke:#F9A825,color:#F57F17
style C fill:#E8F5E9,stroke:#43A047,color:#1B5E20
style D fill:#E8F5E9,stroke:#43A047,color:#1B5E20
GPG鍵の生成と設定
Section titled “GPG鍵の生成と設定”# GPG鍵の生成gpg --full-generate-key# 種類: RSA and RSA(デフォルト)# 鍵長: 4096# 有効期限: 必要に応じて設定# 名前・メール: GitHub に登録しているものと同じ
# 鍵のIDを確認gpg --list-secret-keys --keyid-format=longsec rsa4096/ABC1234567890DEF 2026-03-24 [SC] ABCDEF1234567890ABCDEF1234567890ABCDEF12uid [ultimate] Taro Yamada <taro@example.com># 公開鍵をエクスポート(GitHub に登録する)gpg --armor --export ABC1234567890DEF
# Git に署名鍵を設定git config --global user.signingkey ABC1234567890DEF
# コミット時に自動で署名するgit config --global commit.gpgsign true
# タグにも自動で署名するgit config --global tag.gpgsign true署名付きコミットの作成
Section titled “署名付きコミットの作成”# 手動で署名付きコミットgit commit -S -m "feat: 署名付きコミット"
# gpgsign = true なら -S は不要git commit -m "feat: 自動で署名される"GitHub 上でコミットに 「Verified」 バッジが表示されます。
5.3 Personal Access Token
Section titled “5.3 Personal Access Token”トークンの種類
Section titled “トークンの種類”| 種類 | 特徴 | 推奨度 |
|---|---|---|
| Fine-grained PAT | リポジトリ単位・権限を細かく設定可能 | ✅ 推奨 |
| Classic PAT | スコープ単位で権限設定、全リポジトリに適用 | ⚠️ レガシー |
Fine-grained PAT の作成
Section titled “Fine-grained PAT の作成”GitHub の Settings → Developer settings → Personal access tokens → Fine-grained tokens から作成します。
設定項目を確認しましょう。
| 設定項目 | 説明 |
|---|---|
| Token name | 用途がわかる名前(例:ci-deploy-token) |
| Expiration | 有効期限(短いほど安全) |
| Resource owner | 個人 or Organization |
| Repository access | 対象リポジトリを限定(推奨) |
| Permissions | 必要最小限の権限を選択 |
5.4 Deploy Key
Section titled “5.4 Deploy Key”Deploy Key とは?
Section titled “Deploy Key とは?”Deploy Key は、特定のリポジトリだけにアクセスできる SSH 鍵です。
CI/CD サーバーやデプロイ環境からリポジトリにアクセスする場合に使います。
flowchart LR
subgraph "CI/CDサーバー"
DK["🔑 Deploy Key
(秘密鍵)"]
end
subgraph "GitHub"
R1["📁 repo-A
(Deploy Key 登録済み ✅)"]
R2["📁 repo-B
(アクセス不可 ❌)"]
end
DK -- "アクセス可能" --> R1
DK -. "アクセス不可" .-> R2
style DK fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
style R1 fill:#E8F5E9,stroke:#43A047,color:#1B5E20
style R2 fill:#FFEBEE,stroke:#E53935,color:#B71C1C
PAT との使い分け
Section titled “PAT との使い分け”| 項目 | Deploy Key | PAT |
|---|---|---|
| アクセス範囲 | 1リポジトリ | 複数リポジトリ |
| 認証方式 | SSH | HTTPS |
| 権限 | Read-only or Read/Write | 細かく設定可能 |
| 使いどころ | CI/CD、デプロイサーバー | API 呼び出し、スクリプト |
# Deploy Key 用の鍵ペアを生成ssh-keygen -t ed25519 -C "deploy-key-repo-a" -f ~/.ssh/deploy_repo_aリポジトリの Settings → Deploy keys → Add deploy key で公開鍵を登録します。
書き込みが必要な場合は “Allow write access” にチェックを入れます。
5.5 Credential Storage
Section titled “5.5 Credential Storage”Credential Helper とは?
Section titled “Credential Helper とは?”HTTPS で接続する場合、毎回ユーザー名とトークンを入力するのは面倒です。
Credential Helper は、認証情報を安全にキャッシュしてくれる仕組みです。
| Helper | 保存場所 | セキュリティ | OS |
|---|---|---|---|
cache | メモリ(一定時間) | ○ 時間経過で消える | Linux |
store | テキストファイル | △ 平文保存 | 全OS |
osxkeychain | macOS キーチェーン | ◎ OS が暗号化 | macOS |
manager | OS の資格情報マネージャ | ◎ OS が暗号化 | Windows |
# macOS(推奨)git config --global credential.helper osxkeychain
# Windows(推奨)git config --global credential.helper manager
# Linux(メモリにキャッシュ、デフォルト15分)git config --global credential.helper cache
# Linux(キャッシュ時間を1時間に延長)git config --global credential.helper 'cache --timeout=3600'まとめ:認証方式の選び方
Section titled “まとめ:認証方式の選び方”flowchart TD
Q["何に使う?"]
Q -- "日常の開発" --> SSH["🔑 SSH鍵
(推奨)"]
Q -- "CI/CD から
1リポジトリ" --> DK["🔑 Deploy Key"]
Q -- "CI/CD から
複数リポジトリ" --> PAT["🎫 Fine-grained PAT"]
Q -- "API 呼び出し" --> PAT2["🎫 Fine-grained PAT"]
Q -- "GitHub Actions" --> GHT["🤖 GITHUB_TOKEN
(自動発行)"]
style SSH fill:#E3F2FD,stroke:#1E88E5,color:#0D47A1
style DK fill:#E8F5E9,stroke:#43A047,color:#1B5E20
style PAT fill:#FFF3E0,stroke:#FB8C00,color:#E65100
style PAT2 fill:#FFF3E0,stroke:#FB8C00,color:#E65100
style GHT fill:#F3E5F5,stroke:#8E24AA,color:#4A148C
| 認証方式 | 主な用途 | セキュリティ |
|---|---|---|
| SSH 鍵 | 日常の push / pull | ◎ |
| GPG 署名 | コミットの本人確認 | ◎ |
| Fine-grained PAT | API / CI/CD | ○(期限+最小権限で運用) |
| Deploy Key | CI/CD(単一リポジトリ) | ◎ |
| Credential Helper | HTTPS 接続のキャッシュ | OS 依存 |