コンテンツにスキップ

第5章 認証とセキュリティ

Git と GitHub を安全に使うためには、認証の仕組み をしっかり理解しておく必要があります。
管理者として、チームメンバーに適切な認証方法を案内し、セキュリティポリシーを設計しましょう 🔐


HTTPS でも GitHub に接続できますが、SSH を使うと以下のメリットがあります。

項目HTTPSSSH
認証方法ユーザー名 + トークン鍵ペア(公開鍵 + 秘密鍵)
毎回の入力トークンが必要(※キャッシュ可)不要(鍵で自動認証)
セキュリティトークン漏洩リスク秘密鍵が手元にある限り安全
ファイアウォール通常は問題なしポート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
Terminal window
# Ed25519(推奨)で鍵を生成
ssh-keygen -t ed25519 -C "taro@example.com"
# 対話的に聞かれる内容
# Enter file in which to save the key: (Enterでデフォルト)
# Enter passphrase: (パスフレーズを設定。空でも可だが推奨しない)
Terminal window
# 生成されるファイル
~/.ssh/id_ed25519 # 秘密鍵(絶対に公開しない!)
~/.ssh/id_ed25519.pub # 公開鍵(GitHub に登録する)
Terminal window
# 公開鍵の内容をコピー
cat ~/.ssh/id_ed25519.pub
# macOS ならクリップボードに直接コピー
pbcopy < ~/.ssh/id_ed25519.pub

GitHub の Settings → SSH and GPG keys → New SSH key で登録します。

Terminal window
ssh -T git@github.com
Hi taro-yamada! You've been authenticated, but GitHub does not provide shell access.

このメッセージが表示されれば成功です 🎉

仕事用と個人用など、複数の GitHub アカウントを使い分けたい場合。

~/.ssh/config
# 仕事用
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
Terminal window
# 使い分け(リモートURLを変更)
git remote set-url origin git@github-work:company/repo.git

Git のコミットでは user.nameuser.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
Terminal window
# GPG鍵の生成
gpg --full-generate-key
# 種類: RSA and RSA(デフォルト)
# 鍵長: 4096
# 有効期限: 必要に応じて設定
# 名前・メール: GitHub に登録しているものと同じ
# 鍵のIDを確認
gpg --list-secret-keys --keyid-format=long
sec rsa4096/ABC1234567890DEF 2026-03-24 [SC]
ABCDEF1234567890ABCDEF1234567890ABCDEF12
uid [ultimate] Taro Yamada <taro@example.com>
Terminal window
# 公開鍵をエクスポート(GitHub に登録する)
gpg --armor --export ABC1234567890DEF
# Git に署名鍵を設定
git config --global user.signingkey ABC1234567890DEF
# コミット時に自動で署名する
git config --global commit.gpgsign true
# タグにも自動で署名する
git config --global tag.gpgsign true
Terminal window
# 手動で署名付きコミット
git commit -S -m "feat: 署名付きコミット"
# gpgsign = true なら -S は不要
git commit -m "feat: 自動で署名される"

GitHub 上でコミットに 「Verified」 バッジが表示されます。


種類特徴推奨度
Fine-grained PATリポジトリ単位・権限を細かく設定可能推奨
Classic PATスコープ単位で権限設定、全リポジトリに適用⚠️ レガシー

GitHub の Settings → Developer settings → Personal access tokens → Fine-grained tokens から作成します。

設定項目を確認しましょう。

設定項目説明
Token name用途がわかる名前(例:ci-deploy-token
Expiration有効期限(短いほど安全)
Resource owner個人 or Organization
Repository access対象リポジトリを限定(推奨)
Permissions必要最小限の権限を選択

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
項目Deploy KeyPAT
アクセス範囲1リポジトリ複数リポジトリ
認証方式SSHHTTPS
権限Read-only or Read/Write細かく設定可能
使いどころCI/CD、デプロイサーバーAPI 呼び出し、スクリプト
Terminal window
# 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” にチェックを入れます。


HTTPS で接続する場合、毎回ユーザー名とトークンを入力するのは面倒です。
Credential Helper は、認証情報を安全にキャッシュしてくれる仕組みです。

Helper保存場所セキュリティOS
cacheメモリ(一定時間)○ 時間経過で消えるLinux
storeテキストファイル△ 平文保存全OS
osxkeychainmacOS キーチェーン◎ OS が暗号化macOS
managerOS の資格情報マネージャ◎ OS が暗号化Windows
Terminal window
# 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'

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 PATAPI / CI/CD○(期限+最小権限で運用)
Deploy KeyCI/CD(単一リポジトリ)
Credential HelperHTTPS 接続のキャッシュOS 依存