0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeServer環境でGitHubのgit操作が急に認証エラーになった時の対処法

0
Posted at

はじめに

VSCodeServer環境で、今まで普通に使えていた git pull が急にエラーになりました。

remote: Invalid username or token.
Password authentication is not supported for Git operations.
fatal: Authentication failed for 'https://github.com/xxx/xxx.git'

「え、先月まで使えてたのに…?」となったので、原因と対処法をまとめます。

対象読者

  • VSCodeServer環境でGitHubのprivateリポジトリを使っている方
  • 急にgit操作で認証エラーが出て困っている方

原因

1. GitHubはパスワード認証を廃止済み

2021年8月13日以降、GitHubではHTTPS経由のパスワード認証が使えなくなっています。代わりにPersonal Access Token(PAT)やSSH鍵での認証が必要です。

2. 別のGitサービス用のcredential helperが設定されている

gitの credential.helper は、git操作時に認証情報を自動的に提供する仕組みです。今回の環境では、以前CodeCommitを利用していたため、CodeCommit用のcredential helperが設定されたままになっていました。

$ git config --list | grep credential
credential.helper=!aws codecommit credential-helper $@
credential.usehttppath=true

この設定が残っている状態でGitHubにアクセスすると、gitはCodeCommit用のcredential helperを使って認証しようとします。当然GitHubには対応していないため、認証に失敗します。

これはCodeCommitに限った話ではなく、例えばGitLab用やBitbucket用など、別のGitサービス向けのcredential helperが設定されている場合にも同様の問題が発生します。要するに、接続先のGitサービスとcredential helperの組み合わせが一致していないと認証エラーになります。

3. 以前使えていた理由

以前は環境のどこかにGitHubの認証情報(PATなど)がキャッシュされていた可能性が高いです。gitは認証時にキャッシュされた認証情報を優先的に使うため、credential helperの設定が別サービス向けでも問題なく動作していました。

しかし、環境の再起動やリビルド、キャッシュの期限切れなどでその認証情報が消えると、gitはcredential helperに認証を委任します。その結果、別サービス向けのcredential helperがGitHubに対して無効な認証情報を返してしまい、エラーが発生します。

対処法:Personal Access Token(PAT)の発行と設定

ステップ1:GitHubでPATを発行する

  1. GitHubにログイン
  2. Settings → Developer settings → Personal access tokens → Tokens (classic) に移動
  3. Generate new token (classic) をクリック

設定項目

項目 設定値 備考
Note 任意の名前(例: vscode-server-myproject) 何に使っているかわかる名前にする
Expiration 90 days 推奨 No expiration も可能だがセキュリティ的には期限付きが望ましい
Select scopes repo にチェック privateリポジトリへのフルアクセスが可能になる
  1. Generate token をクリック
  2. 表示されたトークンを必ずコピーする(この画面を閉じると二度と表示されません)

⚠️ Fine-grained token ではなく Tokens (classic) を使う理由
Fine-grained tokenでは、組織(Organization)のリポジトリを選択するために組織側の管理者がFine-grained PATを許可している必要があります。許可されていない場合、privateリポジトリが選択肢に表示されません。Tokens (classic) であればこの制限を受けません。

ステップ2:リモートURLにトークンを設定する

git remote set-url origin https://<GitHubユーザー名>:<PAT>@github.com/<組織名>/<リポジトリ名>.git

例:

git remote set-url origin https://myuser:ghp_xxxxxxxxxxxx@github.com/my-org/my-repo.git

ステップ3:動作確認

git pull

正常にpullできれば成功です。

別の方法:credential helperでトークンを保存する

リモートURLにトークンを埋め込みたくない場合は、GitHub専用のcredential helperを追加する方法もあります。

# GitHub用にstore helperを設定
git config --global credential.https://github.com.helper store

# git pullを実行(認証を聞かれる)
git pull
# ユーザー名: GitHubユーザー名
# パスワード: PAT(トークン)

一度入力すれば ~/.git-credentials に保存され、以降は聞かれなくなります。

トークンの有効期限が切れたら

PATに有効期限を設定した場合、期限が来ると再び同じエラーが発生します。その際は以下の手順で対応してください。

  1. GitHubで新しいPATを発行する
  2. git remote set-url で新しいトークンに更新する(またはcredential storeの場合は ~/.git-credentials を更新する)

まとめ

項目 内容
エラー原因 GitHubのパスワード認証廃止 + 別サービス向けcredential helperとの不一致
対処法 GitHub PAT(Tokens classic)を発行してリモートURLに設定
Fine-grained tokenの注意点 組織の設定次第でprivateリポジトリが選択できない場合がある
トークン期限 90日推奨。期限切れ時は再発行して更新

VSCodeServer環境でGitHubを使う場合、CodeCommitのcredential helperとの共存がポイントです。一度設定してしまえば快適に使えるので、同じ問題に遭遇した方の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?