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

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

### 前提環境
* PC: Mac (バージョン11.5.2)
* Gitプラットフォーム: GitHub

### エラー内容と原因
githubにpushしたらAuthentication failedで怒られた...

```zsh
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を開き、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/2151aabb-3617-76e2-aa2e-7131a198050c.png" width=150>

Developer settings -> Personal access tokensを開きます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/9d579f09-f2bf-d17d-969f-483c40a486ab.png" width=180>

Personal access tokensに来ると、トークンキーの生成ができるので、Generate new tokenをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/d1188f0e-d5e0-8b0d-4dbd-1cf2ea1424c3.png)

トークンを生成すると、有効期限や権限についてもろもろ設定できる画面に遷移します。
各種設定後、「Generate Token」を押してトークン生成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/fe206316-a090-0964-ebbc-5e73292c06a5.png)

トークン生成すると、このような感じでトークンが出てくるのでコピー。
**※画面遷移してしまうとトークンは見れなくなるので、忘れずコピーしてください！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/bdab2b1f-239e-954b-0f98-368765a632e3.png)

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

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


```zsh
$ git push origin hogehoge
Username: your_username
Password: your_token
```

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


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

```zsh
% 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キーの設定を開きます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/2151aabb-3617-76e2-aa2e-7131a198050c.png" width=150>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/a0c0ac60-3f8c-bf57-8fa9-ace13e29cea3.png" width=150>

New SSH keyからキーを登録する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/a2d09748-637e-81d9-eb95-2ceacaaf7e35.png)
Add SSH keyをクリックして登録！
登録後、Passwordを聞かれたら入力して登録を完了させてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/590cd301-2a31-150b-2f69-9a34ebaa4360.png)

##### リポジトリのURL設定を変更する
最初に確認したリポジトリをhttpsからsshに変更します。

ssh用のURLをコピーします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350264/3fd35116-4b9c-a95a-576f-95291ddd24d1.png" width=350>

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

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

```

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

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

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