【Authentication failed】GitHubリポジトリをトークン認証HTTPSかSSHに変更する


先日githubのリポジトリにpushしたらエラーになったので、解消手順を備忘として記しています。
同じ状況に陥った方の一助となればと思います!

前提環境

  • PC: Mac (バージョン11.5.2)
  • Gitプラットフォーム: GitHub

エラー内容と原因

githubにpushしたらAuthentication failedで怒られた...

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/xxxxxx/yyyyyy.git/'

原因は書いてある通りで、パスワードによる認証方式が2021/08/13に廃止されてるようです。
記載のヘルプページ↓に詳細がありました。
https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/

解決方法

ヘルプページに記載されているやるべきことを抜粋するとこちら↓

For developers, if you are using a password to authenticate Git operations with GitHub.com today, you must begin using a personal access token over HTTPS (recommended) or SSH key by August 13, 2021, to avoid disruption. If you receive a warning that you are using an outdated third-party integration, you should update your client to the latest version.

つまり解決方法としては、下記のいずれかになります!

  • ①個人アクセストークンを生成してHTTPSを利用する(推奨らしい)
  • ②SSHを利用する

ということで、それぞれの手順を記載します。
ちなみに、トークンを利用した認証はSSHでは利用できず、HTTPSのみになります。

①個人アクセストークンを生成してHTTPSを利用する

公式の手順はこちら
https://docs.github.com/ja/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token

トークンを生成する

ご自身のGotHubアカウントからsettingsを開き、

Developer settings -> Personal access tokensを開きます。

Personal access tokensに来ると、トークンキーの生成ができるので、Generate new tokenをクリック。

トークンを生成すると、有効期限や権限についてもろもろ設定できる画面に遷移します。
各種設定後、「Generate Token」を押してトークン生成!

トークン生成すると、このような感じでトークンが出てくるのでコピー。
※画面遷移してしまうとトークンは見れなくなるので、忘れずコピーしてください!

トークンを利用して認証する

最後に生成したトークンを利用して認証を行います。
git cloneやpushするときにUsernameとPasswordを聞かれるので、生成したトークンをPassword部分にペーストして認証します。
(Passwordにトークンってなんか違和感ある気もする...)

[2021/12/20 追記]
git pullだとエラーのままでUsernameとPasswordを聞かれなかったので、
一旦空の状態でもpushとかすると無事聞かれるようになって認証でき、その後pullもできました!

$ git push origin hogehoge
Username: your_username
Password: your_token

これでトークンの有効期限内は、このトークン認証でHTTPSのリポジトリを利用できるようになりました!

②リポジトリをhttpsからsshに変更する

念のため、リポジトリの状態を確認。
URLがhttpsから始まるURLになっている場合は、sshに変更します。

% git remote -v
origin  https://github.com/xxxxx/yyyyy.git (fetch)
origin  https://github.com/xxxxx/yyyyy.git (push)

sshキーを生成してssh-agentに追加

[TBD]
公式の参考ページはこちら↓
https://docs.github.com/ja/github/authenticating-to-github/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

GitHubにキーを登録する

ご自身のGotHubアカウントからsettingsからSSHキーの設定を開きます。

New SSH keyからキーを登録する。

Add SSH keyをクリックして登録!
登録後、Passwordを聞かれたら入力して登録を完了させてください。

リポジトリのURL設定を変更する

最初に確認したリポジトリをhttpsからsshに変更します。

ssh用のURLをコピーします。

リポジトリ配下に.git/configがあるので開き、
[remote "origin"]urlを先ほどコピーしたsshのURLに修正します。

% cat .git/config
[core]
        ~省略~
[remote "origin"]
        url = [email protected]:xxxxx/yyyyy.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

これでHTTPSからSSHにリポジトリを変更して利用できるようになりました!


以上、自分への備忘録として書いてみました!

これは推奨とあるので、HTTPSを利用した方が良いのかな?
でもトークンを有効期限で都度更新していく運用もなかなか面倒だな〜と思ったり...(^^;
この辺のスタンダードな運用のやり方をご存知の方いたら是非ともご教示ください🙏