試行錯誤

仕事や趣味(スマブラ)など

【2022年3月】fatal: Authentication failed! BitbucketとSourcetreeが連携できなくなった時の対処法

2022年3月時点で、BitbucketとSourcetreeの連携(pull、push、fetch等)ができなくなる事象が起きたので、共有します。

起きたエラー

まず起きたエラーですが、いつも通りにPushをしようとすると以下のようなエラーログが出ました。

Pushing to https://bitbucket.org/XXX/repo-name.git
remote: Bitbucket Cloud recently stopped supporting account passwords for Git authentication.
remote: See our community post for more details: https://atlassian.community/t5/x/x/ba-p/1948231
remote: App passwords are recommended for most use cases and can be created in your Personal settings:
remote: https://bitbucket.org/account/settings/app-passwords/
fatal: Authentication failed for 'https://bitbucket.org/XXX/repo-name.git/'

(上の何回か繰り返し)

Completed with errors, see above

原因と対応方法

原因

結論から書くと、原因はBitbucketのアプデによる認証方式の仕様変更でした。
具体的な認証方式の変更内容と、どうしてこの変更をしたのかはこちらに書いてあります。
Announcement: Bitbucket Cloud account password usa... - Atlassian Community

内容の簡単な翻訳と要約は後程書きます。

対応方法(Mac

①【Bitbucket】Bitbucketにログインし、Personal Settingsからアプリパスワードを発行する。
②【Sourcetree】認証をBasicにして、アプリパスワードで認証をする。

  • SourceTree > 環境設定でアカウントの編集
  • 認証はBasicを選択
  • ユーザー名をBitbucketのユーザー名を入力
  • パスワードに①で発行したアプリパスワードを入力

③【Sourcetree】 gitのURLを確認・変更する

  • 右上「設定>リモート」からリモートリポジトリのパスを確認する
  • URL内の@以前がメアドの場合は、ユーザー名に変更する。

例)https://[bitbucketのアカウント名]@bitbucket.org/mice/mice-web-repository.git

自分はこれでいつも通り連携できるようになりました。

今回の原因についてもう少し詳しく

上記のコミュニティサイトの大雑把な翻訳と要約になります。
間違い等ございましたら、何なりとご指摘ください。筆者は飛んで喜びます。

以下がまとめになります。

【要約】
HTTPS経由、もしくはBitbucket Cloud REST API経由の、Git認証をアカウントパスワードからアプリパスワードによって認証をする様に変更した。

  • 元々SSH接続で認証してる人に影響はない
  • SourceTree for Windowsで利用している人にはちょっとした"issue"があるのでcommunity post見ておくれ。
  • アプリパスワードの認証ではメアドを認証の際にユーザーネームとして使わなくなりました。なのでURLにメアドではなくユーザーネームを書く様にしてくださいね。

(OAuthについてはあまり詳しくないのでほぼコピペ)

  • OAuth 2.0 Resource Owner Password Credentials Grant (4.3) flowは利用できなくなりました。OAuth 2.0 (RFC-6749) grant flowsとcustom Bitbucket flow for exchanging JWT tokens for access tokensは使えます。OAuthに関する仕様変更はこちら

https://developer.atlassian.com/cloud/bitbucket/oauth-2/

  • 今回の仕様変更はアプリパスワードによってより詳細に権限を管理することで、インフラ周りのセキュリティを向上させる目的。

最後に

簡単ではありますが、この記事が誰かのお役に立てれば幸いです。
また、まだまだ新米エンジニア故、内容に誤りがあるかもしれません。その場合はご指摘いただけますと嬉しいです。