メールをチェックしていたら、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にアクセスする全てのサービス
一方、以下のような利用・対応をしている場合は特に対応は必要ないとのこと
- 2段階認証を利用中(既にトークンorSSHベースの認証を設定できている)
- Githubエンタープライズサーバーを利用中
- Github Appsを利用中
変更の理由
1 | パスワード | トークン | 詳細 |
---|---|---|---|
ユニーク | △ | ○ | パスワードは設定された物を使い回すのに対し、トークンは端末・使用する度に個別に生成される |
ランダム | ✖︎ | ○ | トークンはランダムな文字列で生成されるため辞書型ブルートフォースアタックにも強い |
制限性 | ✖︎ | ○ | トークンは権限のスコープが制限されているため漏洩による被害を最小限にできる。パスワードは漏洩したらユーザー権限の全てがリスクに晒されてしまう |
取り消し容易性 | ✖︎ | ○ | トークンは認証情報を変えずに取り消し可能である。パスワードは、それ自体が認証情報であり取り消すことができない |
これらの理由から、Githubでも2段階認証・デバイス認証といったセキュリティを高める機能が多数リリースされています。
にも関わらず、現在のユーザーの多くがパスワード認証を使い回し続けてしまっている。
セキュリティリスクの観点から、従来のパスワード認証を利用できなくしてでもユーザーに導入させるための対応のようです。
いつから使えなくなるのか?
ブラウンアウト(一時的にパスワード認証が利用できない状態)期間を経て、2021年8月13日からパスワード認証ができなくなります。
ブラウンアウトスケジュール(日本時間)
・2021年6月30日(水)16~19時
・2021年7月1日(木)1~4時
・2021年7月28日(水)16~19時
・2021年7月29日(木)1~4時
設定を忘れたままブラウンアウトを迎えないよう、注意したいところですね。
何をすればいいのか?
* 2段階認証だけを設定して、個人アクセストークンを設定しないと、Authentication failed for...
となりローカルでのGit操作ができなくなります。両方とも忘れず設定しましょう。
対応手順
2段階認証を使用する
公式リファレンスが分かりやすいので、特に詰まることなく設定できます。
QRコードをスキャンするところでは、Googleの認証アプリが使えました。
個人アクセストークンを使用する
こちらも公式リファレンスが充実しているほか、下記の記事がとても丁寧に解説して下さっています。
GitHubに二段階認証を設定した後にGit操作できない時の解決策
補足
・トークン入力を省略したい
トークン情報の入力するのが面倒な場合は認証情報ヘルパーの設定・更新をしましょう。
・ローカルのプロジェクトのリモートURLのHTTPS化
個人アクセストークンを使う場合、リモートリポジトリとの通信はHTTPSが必須になります。
# リモートのURLを表示
$ git remote -v
# https:がついてない場合はset-urlコマンドで書き換え
$ git remote set-url origin https://github.com/USERNAME/REPOSITORY.git