Githubから届いたDeprecation Noticeメールに対応する

メールをチェックしていたら、Githubから以下のようなメールが届いていた。

>
You recently used a password to access the repository at アカウント名/リポジトリ名 with git using git/2.22.0. Basic authentication using a password to Git is deprecated and will soon no longer work. Visit https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information around suggested workarounds and removal dates.

ざっくり和訳すると

> 
最近[リポジトリ名]にパスワード利用しGitを使用しました。
ベーシック認証は非推奨になり、もうすぐ利用できなくなります。
代替策・利用できなくなる日についてはブログを確認ください。


認証まわり=セキュリティにも関わりそうなことので調査&対応しました。
前半はメール記載のブログの要約が多いので、やるべきことだけをサッサと済ませたい方は**何をすればいいのか?**以降を読んでもらえればと思います。

### TL;DR
**2021年8月13日**から認証が必要なGit操作でパスワードを使った認証をできなくするから、
それまでにトークンorSSHキー認証に切り替えよう。

### 影響を受けるワークフロー
ブログのWorkFlows Affectedより

- Gitコマンドを使ったアクセス
- Gitを用いたデスクトップアプリ(例:Sourcetree)
- パスワードを利用してGithubリポジトリ・Github.comにアクセスする全てのサービス

一方、以下のような利用・対応をしている場合は特に対応は必要ないとのこと

- ２段階認証を利用中(既にトークンorSSHベースの認証を設定できている)
- Githubエンタープライズサーバーを利用中
- Github Appsを利用中

### 変更の理由

| 1 | パスワード | トークン | 詳細 |
|:-:|:-:|:-:|:-:|
|ユニーク|△| ○ |パスワードは設定された物を使い回すのに対し、トークンは端末・使用する度に個別に生成される|
|ランダム| ✖︎ |○|トークンはランダムな文字列で生成されるため辞書型ブルートフォースアタックにも強い|
|制限性|✖︎|  ○ |トークンは権限のスコープが制限されているため漏洩による被害を最小限にできる。パスワードは漏洩したらユーザー権限の全てがリスクに晒されてしまう   |
|取り消し容易性|✖︎|○|トークンは認証情報を変えずに取り消し可能である。パスワードは、それ自体が認証情報であり取り消すことができない|

これらの理由から、Githubでも２段階認証・デバイス認証といったセキュリティを高める機能が多数リリースされています。
にも関わらず、現在のユーザーの多くがパスワード認証を使い回し続けてしまっている。

セキュリティリスクの観点から、従来の**パスワード認証**を利用できなくしてでもユーザーに導入させるための対応のようです。

### いつから使えなくなるのか？
ブラウンアウト(一時的にパスワード認証が利用できない状態)期間を経て、**2021年8月13日からパスワード認証**ができなくなります。

ブラウンアウトスケジュール(日本時間)
・2021年6月30日(水)16~19時
・2021年7月1日(木)1~4時
・2021年7月28日(水)16~19時
・2021年7月29日(木)1~4時

設定を忘れたままブラウンアウトを迎えないよう、注意したいところですね。

### 何をすればいいのか？
- [２段階認証を使用する](https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/securing-your-account-with-two-factor-authentication-2fa)
- [個人アクセストークンを使用する](https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token)

＊ ２段階認証だけを設定して、個人アクセストークンを設定しないと、`Authentication failed for...`となり**ローカルでのGit操作ができなく**なります。両方とも忘れず設定しましょう。

### 対応手順

#### [２段階認証を使用する](https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/securing-your-account-with-two-factor-authentication-2fa)

公式リファレンスが分かりやすいので、特に詰まることなく設定できます。
QRコードをスキャンするところでは、Googleの認証アプリが使えました。

#### [個人アクセストークンを使用する](https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token)

こちらも公式リファレンスが充実しているほか、下記の記事がとても丁寧に解説して下さっています。

[GitHubに二段階認証を設定した後にGit操作できない時の解決策](https://qiita.com/kitoko552/items/3f45de6c876c638b690d)

##### 補足

・トークン入力を省略したい
トークン情報の入力するのが面倒な場合は[認証情報ヘルパー](https://docs.github.com/ja/free-pro-team@latest/github/using-git/caching-your-github-credentials-in-git)の設定・更新をしましょう。

・ローカルのプロジェクトのリモートURLのHTTPS化
個人アクセストークンを使う場合、[リモートリポジトリとの通信はHTTPSが必須](https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B)になります。

```
# リモートのURLを表示
$ git remote -v

# https:がついてない場合はset-urlコマンドで書き換え
$ git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
```