【GitHub】認証に gh (GitHub CLI) を使おう

投稿日: 2023/09/17
更新日: 2023/09/18
シェア:

URL copied!


概要

GitHub の認証をするときに GitHub CLI の gh を使って楽に安全に使いましょう。

ryotafull 的 gh をお勧めする理由

ブラウザ上で簡単に発行でき、期間を決めて失効させられることがお勧め理由です。

どの PC に GitHub の認証情報 (SSHキー含む) 入れているか覚えてますか?

期間を短く設定しておけば、勝手に失効します。このため、予期せぬところに保存していた認証情報で 乗っ取られる心配が減ります 。(気づいた時には良く失効しているので新たに更新する手間は増えますが。)
端末やサーバーを多く持っている場合に上記が起こると考えています。gh を使う時に設定するトークンは使用している環境ごと(ログインユーザーごと)に作成することで下記に利点があります。

  • どこで使っているかの把握
  • 設定を各々分けることが可能

同じ SSHキー使い回してませんか?

SSH の方がプロトコルとして安全では?と思われるかもしれませんが、ローカルに置いてある SSHキーを気付かないうちにコピーされてしまっていたらどうでしょう。
そして安全だからと何年も同じ SSHキー使っていませんか?
短いスパンで認証情報を新しいものに変える方が前項目を含めトータル的に私は安全だと思います。
また、GitHub 自身も認証方法は HTTPS の方が推奨になっていたかと思います。(記事見つけられず。。)

インストール方法

mac

brew install gh

apt を使う場合

type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y

引用: Installing gh on Linux and BSD - GitHub

yum を使う場合

type -p yum-config-manager >/dev/null || sudo yum install yum-utils
sudo yum-config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
sudo yum install gh

引用: Installing gh on Linux and BSD - GitHub

アカウントの設定

GitHub

アカウントのアイコンを押下し、 Settings を選択。

settings が開いたら、左のメニューの中から Developer Settings を選択

画面が遷移した後に、Personal access tokens の中から Tokens (classic) を選択。

Generate new token より作成画面に遷移。

Note には環境等をわかりやすく書きましょう。
Scopes では以下は必須となっておりますのでチェックしてください。

  • repo
  • workflow
  • read:org

Generate token を押して完了すると元のページに戻り、1度きりしか見えない トークンが表示されます。
これをコピーします。

gh を使った認証

$ gh auth login

# GitHub.com を選択
? What account do you want to log into? GitHub.com

# HTTPS を選択
? What is your preferred protocol for Git operations? HTTPS

# Y(Yes) を入力
? Authenticate Git with your GitHub credentials? Yes

# Paste an authentication token を選択
? 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 ryotafull

git コマンドで gh の認証情報が使えない場合

前項目を実施し、ログインしても

$ git clone https://github.com/xxxxxx/yyyyy.git
Username for 'https://github.com/xxxxxx/yyyyy.git':

と、ユーザー情報を求められてしまう場面がありました。

以下を実行して git credential helper を設定しましょう。

$ gh auth setup-git

トークンの更新

Settings -> Developer Settings -> Personal access tokens - Tokens (classic)

トークンの一覧画面からキー名(Noteで設定した名前)を押下。 編集画面に遷移し、新規の時にはなかった再作成ボタンが表示されます。

有効期間を設定して Regenerate token ボタンを押すと編集画面に戻ってきます。下部の Update token を押して完了です。
(Regenerate token を押した時点で再発行の通知が飛んで来るので、トークンをコピーした後に Update token を押さなくてもそのトークン自体は有効です)

トークンの削除

Settings -> Developer Settings -> Personal access tokens - Tokens (classic)

トークンの一覧画面からキー名(Noteで設定した名前)の右端にある Delete ボタンを押下。

おわりに

現時点(2023/09) では Fine-grained personal access tokens は Beta となっているので取り扱っておりません。
こちらの方がきめ細やかになっているので、Beta が外れる頃に別記事を出したいと思います。

参考