ottijp blog

GitHubのプライベートリポジトリのpush/pullで突然ユーザ名パスワードが要求されるようになった時の対応

TL;DR

clone済みのGitHubのプライベートリポジトリに対するpush/pullが,急にできなくなってしまいました. ユーザ名パスワードでの認証は結局できなかったので,トークンでの認証に切り替えました.

状況

ある日,clone済みのプライベートリポジトリに対してpullすると,認証を要求され,正しい(GitHubのWebサイトでは通る)認証情報を入力しても,認証が通らなくなりました.

$ git pull
Username for 'https://github.com': ottijp
Password for 'https://ottijp@github.com':
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/ottijp/REPO_NAME/'

4月末には問題なくpushできていたリポジトリで,全く別の環境で新しくcloneしようとしても,同様に認証が通りませんでした. また,この時,キーチェーンにはgithub.comのエントリがありませんでした.(以前からあったかどうかは確認していませんでしたが,後述する対応方法でうまく動作した後では,エントリができていました.)

ググると,2段階認証を設定したりパスワードを変更した後でこのような症状が出るとの情報がありましたが,2段階認証は設定していないし,パスワードの変更もしていません.

対応

一応,試しにoriginのURLをssh(git@github.com:ottijp/REPO_NAME.git)に変えて鍵認証でアクセスすると正常にpullはできたのですが, httpsでしかアクセスできない環境からも使う予定があったので,元のhttpsのoriginのままで認証を通す方法を考えました.

git credential-osxkeychainでキーチェーンのエントリをいじってみたり,GIT_TRACE=trueとしてトレースログをチェックしたり,色々試しましたが,結局ユーザ名パスワードではどうやっても認証が通りませんでした. そこで,2段階認証設定時の対応と同様に,アクセストークンを発行して,パスワードにそのトークンを入力することで,正常に動作するようになりました.

参考: GitHub で 2FA 設定済アカウントの Private Repository をクローン - to-me-mo-rrow - 未来の自分に残すメモ -

  1. GitHubのSettings > Developer setting > Personal access tokensページで新しくトークンを発行
  2. 以下のようにパスワードの代わりにトークンを入力
$ git pull
Username for 'https://github.com': ottijp
Password for 'https://ottijp@github.com': (←ここにパスワードではなくトークンを入力)
Already up to date.

認証が通ったあとはキーチェーンにエントリができていて,以後はこれがcredential helperとして使われ,ユーザ名パスワード(トークン)入力は要求されませんでした.

$ git pull
Already up to date.

$ echo host=github.com | git credential-osxkeychain get
password=xxxxxxxxxxxxxxxxxx
username=ottijp

ottijp
都内でアプリケーションエンジニアをしています
© 2024, ottijp