Githubからリモートリポジトリに接続する方式として、SSH、HTTPSの3種類のプロトコルがあります。HTTPSプロトコルでの接続はユーザ名とパスワードを使った認証になります。SSHプロトコルは秘密鍵を使った認証で、パスフレーズ無しで安全に接続することができます。
GithubはHTTPS接続から、リモートパスワード認証を2021年8月13日に廃止しました。
リポジトリからPullするときなど、Githubの認証時に今までのパスワードを入力すると下記のようなエラーになるため、すでに知っている人も多いと思います。
$ git pull
Username for 'https://github.com': ***
Password for 'https://***@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/***/****.git/'
リモートパスワード認証は廃止されましたが、 パーソナルアクセストークン(Personal access tokens)でのHTTPS接続はサポートされています。
今後は下記の2通りの方法で接続することになります。
- SSH経由で公開鍵を使って認証する
- HTTPS経由でパスワード認証の代わりにアクセストークンを使って認証する
HTTPS経由を使う際は、Githubでアクセストークンを作成してください。ここではアクセストークンの作成と、アクセストークンを使った接続を説明します。
Tokenの取得
Personal access tokensの設定はGithubの下記のページで行います。
https://github.com/settings/developers
上記URLをクリックするか、下記の手順でページを遷移してください。
GitHub画面の右上から、ユーザーアイコンをクリックし、[Settings]をリリックしてください。
Profileページが表示されたら、左メニューから[Developer settings]をクリックします。
GitHub Appsページが表示されたら、左メニューから[Personal access tokens]をクリックします。
Personal access tokensページが表示されたら、[Generate new token]ボタンをクリックします。この先のページでアクセストークンを生成します。
New personal access tokenページが表示されたら、必要項目を入力します。
Noteにトークンの説明を記載し、Expirationにトークンの有効期限を設定します。Select scopesではアクセストークンの権限スコープを設定します。ここではrepoにチェックをつけてください。この権限でクローンなどのリポジトリ操作が可能となります。その他必要な権限があればチェックを追加してください。
権限のチェックが終わったら、[Generate token]ボタンをクリックします。このあとトークンが生成されるので、トークンを記録します。このトークンはあとで確認することができないので、紛失した場合は再発行となります。
これでトークンの作成が完了しました。リポジトリ操作の際にパスワードの入力をうながされたら、記録しておいたトークンを入力してください。もしトークンを紛失した場合、Personal access tokensページで紛失したトークンを削除し、新たにトークンを作成してください。
アクセストークンを使って認証する
今回作成したアクセストークンで認証テストをしてみましょう。HTTPS経由のリポジトリがあればそこでプルなどを試してみてください。たとえば、ローカルでプルした場合、下記のようにトークンの入力を促されます。
$ git pull
Username for 'https://github.com':
Password for 'https://***@github.com':
Usernameにリポジトリに割り当てられたユーザ名、Passwordに今回作成したトークンを指定してください。[Enter]キーをクリックして、正常に認証が完了すると、Pullが始まります。
アクセストークンを保存する
アクセストークンは非常に長いので、毎回の入力は大変です。Gitにはcredential.helperという認証情報を記録する仕組みが用意されているので、これを利用してアクセストークンの入力を省略する方法を紹介します。次のコードはメモリに認証情報を記録します。
git config --global credential.helper cache
使い方としては、認証前に上記コマンドを発行し、そのあとにgit pullなどを発行して認証を行ってください。そこで入力した内容が記録され、次回以降入力が必要なくなります。
次のコードは、storeというオプションを使って、パスワードをファイルに保存しています。半永久的に保存されますが、パスワードがそのまま平文で記録されるためセキュリティの問題が残ります。
git config --global credential.helper 'store --file ~/.git_credentials'
おすすめはcacheオプションで、メモリに期限付きで記録します。下記は24時間認証情報を記録します。
git config --global credential.helper 'cache --timeout=86400'
アクセストークンの有効期限にcacheオプションも合わせた方が良いでしょう。たとえばアクセストークンの有効期限が30日の場合、1日が86400秒ですので、 86400秒に30日をかけて2592000秒になります。次のコードは、cacheオプションに30日の有効期限を設定しています。
git config --global credential.helper 'cache --timeout=2592000'