はじめに #
GitHubでの認証方法について、ユーザー名とパスワードを使った認証を廃止していますが、 SSH以外の方法を試してみたいと思い、パーソナルアクセストークン(PAT)を使った認証設定について、 実際の手順とともに試してみました。
結論 #
個人利用の場合は、GitHub CLI での自動発行が最も簡単で安全です
# 1. GitHub CLI をインストール
sudo apt install gh
# 2. 認証設定
gh auth login
# 3. Git認証ヘルパーの設定(自動で設定される場合が多い)
gh auth setup-git
改めてなぜパスワード認証が使えなくなったのか? #
パスワード認証の廃止 #
GitHubは2021年8月13日以降、Git操作におけるユーザー名とパスワードを使った認証を廃止しました。 これは以下理由みたいです。
- セキュリティ強化: パスワードの漏洩リスクを軽減
- 多要素認証の促進: より安全な認証方法への移行
- 業界標準への準拠: OAuth 2.0などの標準的な認証方式の採用
実際のエラーメッセージ #
パスワード認証を試すと、以下のようなエラーが表示されます:
remote: Invalid username or token. Password authentication is not supported for Git operations. fatal: Authentication failed
パーソナルアクセストークン(PAT)とは? #
PATの概要 #
パーソナルアクセストークン(PAT)は、特定の権限を持つパスワードの代わりとなる文字列です。
Git操作の際にこのトークンを使用することで、安全に認証できます。
現在の認証方法 #
現時点でのGitHub認証方法は以下の2つが主流です
- パーソナルアクセストークン(PAT) ※ この記事で解説
- SSH認証 - 公開鍵・秘密鍵を使用
この記事では、推奨されているパーソナルアクセストークン(PAT)による認証について試してみます。
パーソナルアクセストークン(PAT)の取得方法 #
パーソナルアクセストークン(PAT)の取得方法は主に2つあります
- GitHub CLI (gh auth login) でトークン自動作成 - 推奨方法
- 自分で PAT を発行する - 細かい権限管理が必要な場合
それぞれの特徴と使い分けについて詳しく見ていきましょう。
方法①: GitHub CLI でトークン自動作成(推奨) #
仕組み #
gh auth login を実行すると、CLI が GitHub API の Device Flow 認証 を使って自動でトークンを発行します。
- ユーザーはブラウザで GitHub にログインし、表示されるコードを入力するだけで済みます
- 発行されるトークンは CLI によって自動管理され、
~/.config/gh/hosts.ymlに保存されます
特徴 #
メリット
- トークンを自分でコピー・管理する必要がない
- デフォルトで必要なスコープが付与される(repo, read:org など)
- セキュリティ的に安全で手間が少ない
- 有効期限付き PAT(Fine-grained PAT)が生成される
注意点
- 期限が切れると再認証が必要
- 細かい権限設定はできない
方法②: 自分で GitHub Web から PAT を発行 #
仕組み #
GitHub の Settings > Developer settings > Personal access tokens から手動で PAT を作成します。
- 作成時に 有効期限 と 権限スコープ を自分で選択
- 発行したトークンをコピーし、
gitや `gh auth login に入力して利用
特徴 #
メリット
- 細かい権限管理ができる(例:リポジトリごとに限定、Read/Write の選択)
- 有効期限を長めにしたり、必要なスコープだけ選んだりと柔軟
- 組織での使用時に細かい制御が可能
注意点
- トークンを 自分で安全に保管する必要がある
- トークン漏洩リスクもある(誤って環境変数やログに残すなど)
- 管理が複雑になる可能性がある
実際にパーソナルアクセストークン(PAT)を設定してみる #
事前準備: GitHub CLI のインストール #
まず、GitHub CLI をインストールします。WSL上にインストールするので apt install を使用します。
# GitHub CLI のインストール
tech-0222@MSI:~$ sudo apt install gh
~省略~
tech-0222@MSI:~$
# インストール確認
tech-0222@MSI:~$ gh version
gh version 2.4.0+dfsg1 (2022-03-23 Ubuntu 2.4.0+dfsg1-2)
https://github.com/cli/cli/releases/latest
tech-0222@MSI:~$
方法①: GitHub CLI でトークン自動作成 #
手順 #
gh auth login を実行すると対話形式で入力を選択します。以下の手順で進めていきます。
tech-0222@MSI:~$ gh auth login
# 1. GitHub.com を選択
? What account do you want to log into? GitHub.com
# 2. HTTPS を選択
? What is your preferred protocol for Git operations? HTTPS
# 3. Yes を選択(Git操作でもGitHub CLIの認証を使用)
? Authenticate Git with your GitHub credentials? Yes
# 4. Login with a web browser を選択
# ※Paste an authentication token(自分で発行した PAT を貼り付ける方式)
# ※「ブラウザログイン」を選ぶと、GitHub CLI が自動でトークンを発行して `~/.config/gh/hosts.yml` に保存してくれます。
? How would you like to authenticate GitHub CLI? Login with a web browser
! First copy your one-time code: XXXX-XXX
# 5. Enter キーをクリック
# 対応していると自動でブラウザが開くが、WSL上からだとNGだった
# メッセージ内のURL「https://github.com/login/device」でブラウザからアクセスする
- Press Enter to open github.com in your browser...
! Failed opening a web browser at https://github.com/login/device
exec: "xdg-open,x-www-browser,www-browser,wslview": executable file not found in $PATH
Please try entering the URL in your browser manually
ブラウザでの認証手順 #
WSL環境では自動でブラウザが開かないため、手動でブラウザを開いて認証を行います。
-
実行結果「Failed opening a web browser at https://github.com/login/device」 のURLにアクセスします
-
「Continue」をクリック
- First copy your one-time code: XXXX-XXX で表示されたコード(XXX-XXX)を 入力して「Continue」をクリック
- 権限確認画面で「Authorize github」をクリックして権限を許可します
この画面では、GitHub CLIがあなたの代わりにGitHubアカウントで操作を行うための 「許可証」を発行するかどうかを確認しています。
要求される権限:
- Gists:
Read and write(読み書き) - Organizations and teams:
Read-only(読み取り専用) - Repositories:
PublicとPrivate(公開と非公開のリポジトリ) - Workflow: GitHub Actionsのワークフローファイルを更新する権限
- GitHubの二要素認証(2FA)を設定していると以下画面が表示されますので Use github mobile をクリックしてモバイル側で番号を入力して認証を許可します
二要素認証でOKだと以下画面が表示されます。
- CLIの画面が以下に進み、Enter キーをクリックして以下画面が表示されれば成功です。
tech-0222@MSI:~$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser
! First copy your one-time code: 84EA-BD16
- Press Enter to open github.com in your browser...
! Failed opening a web browser at https://github.com/login/device
exec: "xdg-open,x-www-browser,www-browser,wslview": executable file not found in $PATH
Please try entering the URL in your browser manually
✓ Authentication complete. Press Enter to continue...
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as XXXXX
tech-0222@MSI:~$
- 認証設定が正しく設定されているかは
gh auth statusで確認できます。
tech-0222@MSI:test-repository$ gh auth status
github.com
✓ Logged in to github.com as XXXXX (/home/XXXXX/.config/gh/hosts.yml)
✓ Git operations for github.com configured to use https protocol.
✓ Token: *******************
tech-0222@MSI:test-repository$
- 認証設定が正しく動作するか確認してみましょう。 自分の適当なリポジトリで「git remote -v」を実行して認証を聞かれなければOKです。
tech-0222@MSI:test-repository$ git remote -v
origin https://github.com/XXXXXX/test-repository.git (fetch)
origin https://github.com/XXXXXX/test-repository.git (push)
tech-0222@MSI:test-repository$
- Git認証ヘルパーの設定のため、以下コマンドを実行します。
gh auth setup-gitを実行することで、git pullやgit pushなどのリモート操作で認証が必要になった際に、Gitは自動的にgh auth git-credentialを呼び出し認証するため、ユーザー名やパスワード(またはパーソナルアクセストークン)を手動で入力する必要がなくなります。
gh auth setup-git
補足:
Login with a web browserを選択している場合、これは自動で設定されます。Paste an authentication tokenを選択した場合のみ手動で実行する必要があります。
認証ヘルパー設定: Git の資格情報ヘルパーに GitHub CLI を設定します。これにより、Git コマンドを実行する際に、GitHub CLI が認証を仲介するようになります。
設定ファイルの確認 #
どんな認証設定が設定されているか確認してみましょう。 「helper = !/usr/bin/gh auth git-credential」の箇所が認証ヘルパーの設定みたいですね。
# .gitconfig の確認
tech-0222@MSI:~$ cat .gitconfig
[init]
defaultBranch = main
[user]
email = 123456+XXXXX@users.noreply.github.com
name = XXXXXX
[credential "https://github.com"]
helper =
helper = !/usr/bin/gh auth git-credential
# GitHub CLI の設定ファイル確認
tech-0222@MSI:~$ cat .config/gh/config.yml
# What protocol to use when performing git operations. Supported values: ssh, https
git_protocol: https
# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment.
editor:
# When to interactively prompt. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled
prompt: enabled
# A pager program to send command output to, e.g. "less". Set the value to "cat" to disable the pager.
pager:
# Aliases allow you to create nicknames for gh commands
aliases:
co: pr checkout
# The path to a unix socket through which send HTTP connections. If blank, HTTP traffic will be handled by net/http.DefaultTransport.
http_unix_socket:
# What web browser gh should use when opening URLs. If blank, will refer to environment.
browser:
# トークン情報の確認
tech-0222@MSI:~$ cat .config/gh/hosts.yml
github.com:
user: XXXXXX
oauth_token: gho_XXXXXXXXXXXXXXXXXXXXXXXX
git_protocol: https
方法②: 自分で PAT を発行して認証に使用する #
GitHubでPATを生成する #
PATは、特定の権限を持つパスワードの代わりとなる文字列です。 Git操作の際にこのトークンを使用することで、安全に認証できます。
手順 #
-
GitHub の Personal Access Tokens (classic) にアクセス
-
「Generate new token」>「Generate new token (classic)」をクリック
- 二要素認証の画面が表示される場合は認証を通す
-
項目を設定
- Note: 任意(例: test-repo-token)
- Expiration: 必要に応じて(デフォルトと 90日、無期限は非推奨)
- Scopes:
- プライベートリポジトリなら
repo - 公開リポジトリのみなら
public_repo - 所属組織の読み取り
read:org - GitHub Actions の操作用
workflow
- プライベートリポジトリなら
-
「Generate token」をクリック
-
表示されたトークンをコピー(1回しか表示されません⚠️)
PATをGitの認証として使用する #
# 設定
tech-0222@MSI:~$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: ****************************************
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as XXXXX
tech-0222@MSI:~$
# 認証設定の確認
tech-0222@MSI:~$ gh auth status
github.com
✓ Logged in to github.com as XXXXX (/home/XXXXX/.config/gh/hosts.yml)
✓ Git operations for github.com configured to use https protocol.
✓ Token: *******************
# 実行してみる
tech-0222@MSI:test-repository$ git remote -v
origin https://github.com/XXXXXX/test-repository.git (fetch)
origin https://github.com/XXXXXX/test-repository.git (push)
tech-0222@MSI:test-repository$
よくあるエラーと対処法 #
もし、PAT発行時に権限が不足しているとgh auth login実行時に以下のエラーが発生します:
error validating token: missing required scope 'read:org'
その場合は、GitHubでPATの権限を修正してから再度、gh auth loginを実行してください。
エラー例:
tech-0222@MSI:~$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: ****************************************
error validating token: missing required scope 'read:org'
tech-0222@MSI:~$
その他の認証方法(参考) #
上記以外にも以下のような方法がありますが、利便性やセキュリティ面から個人端末で使用する分にはgh auth login + gh auth setup-git を利用するのが最も便利です。
手動でのPAT入力 #
git pullやgit pushのパスワード入力欄に、ユーザー名ではなく生成したPATを貼り付けて認証します。
これだと使用する際に毎回認証を聞かれるため、利便性が低いです。
$ git pull --tags
Username for 'https://github.com': XXXXX
Password for 'https://XXXXX@github.com': [PATを入力]
Already up to date.
$
Git認証情報の永続化 #
store(永続保存) #
~/.git-credentials に平文で保存されるため、セキュリティ的には弱いです。
# ファイルに保存し永続化
git config --global credential.helper store
cache(キャッシュ) #
メモリ保持、例: 1時間だけ有効にするなど短時間で認証情報を管理したい用途向けです。
# キャッシュ時間はデフォルト値(15分)
git config --global credential.helper cache
# キャッシュ時間を指定(3600秒 = 1時間)
git config --global credential.helper 'cache --timeout=3600'
GitHub CLI からログアウトする方法 #
gh auth logout で管理している情報は完全に削除できます。
確認後、もう一度 gh auth status を実行すると「未ログイン状態」と表示されます。
ログアウト手順 #
gh auth logout
- 対話形式でどのアカウントを削除するか選択できます
Remove all GitHub CLI credentials?で Yes にすると完全削除- 削除される内容:
~/.config/gh/hosts.yml内の OAuth トークン- CLI が保存していた認証情報全て
ログアウト例 #
# ログアウト
tech-0222@MSI:root$ gh auth logout
? Are you sure you want to log out of github.com account 'XXXXX'? Yes
✓ Logged out of github.com account 'XXXXX'
tech-0222@MSI:root$
#確認
tech-0222@MSI:root$ gh auth status
You are not logged into any GitHub hosts. Run gh auth login to authenticate.
tech-0222@MSI:root$
まとめ #
この記事では、GitHubのパーソナルアクセストークン(PAT)を使った認証設定について試してみました。
主要なポイント #
- パスワード認証の廃止: 2021年8月13日以降、GitHubはセキュリティ強化のためパスワード認証を廃止
- 2つのPAT取得方法:
- GitHub CLI での自動発行(推奨)
- 手動でのPAT発行(細かい権限管理が必要な場合)
- セキュリティの向上: トークンベースの認証により、より安全な認証が可能