【git】パスワードを受け付けなくなりアクセストークンを取得後に行った設定


投稿日 2021年10月7日 >> 更新日 2023年3月1日

今回はgitユーザーに通知された「2021年8月13日以降、GitHub.comでGit操作を認証する際にアカウントパスワードを受け付けなくなります。」について、パスワードの代わりとなるアクセストークン取得後の設定について書いていきたいと思います。

なぜこのような記事を書くことに至ったかというと、私の数あるリモートリポジトリの中で頻繁に「push」「pull」操作を行うリポジトリだけパスワードを省く(https通信の方)といった設定をしていたこともあり、アクセストークンを取得しても中々「push」することができずに四苦八苦したためであります。

$ git push
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://ユーザーネーム:パスワード@github.com/ユーザーネーム/リポジトリ.git/'

上記の問題はリモード先であるURLでした。

リモート先のURLを変更してやることで、アクセストークンでの認証を通過して「push」することができるので、それらの設定を行っていきたいと思います。

なお、以下のような方が参考になります。

  • アクセストークンを取得済み
  • リモート通信がhttps
  • リポジトリの移行時にパスワードを求められるのを省いている人

実行環境

実行環境
Windows Subsystem for Linux
git version 2.17.1

リモート先のURLを変更する

リモート先のURLとは、gitコマンドの「push」や「pull」でリポジトリの移行を行う際に定めている宛先です。

そのURLが特定のファイル下でどのように設定されている確認してみます。

では移行したいファイルのディレクトリへ移動し、そのディレクトリに「.git」があるか確認します。

※Linuxの場合

$ ls -a
.git .gitignore requirements.txt etc...

現在gitで設定されている内容を確認するには「.git」ディレクトリ内にある「config」ファイルを開きます。

「git config --list」で簡単に中身を取得することができます。

$ git config --list
user.name=ユーザーネーム
user.email=メールアドレス
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=https://ユーザーネーム:パスワード@github.com/ユーザーネーム/リポジトリ.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.main.remote=origin
branch.main.merge=refs/heads/main

上記にある「remote.origin.url=https....」がリモート先のURLとして設定されたものです。

リモート先のURLのみ取得したい場合は、「git remote -v」とします。

$ git remote -v
origin  https://ユーザーネーム:パスワード@github.com/ユーザーネーム/レポジトリ.git (fetch)
origin  https://ユーザーネーム:パスワード@github.com/ユーザーネーム/レポジトリ.git (push)

よく見てみると、通常の設定と少し異なっています。

これはリポジトリの移行時にパスフレーズを省く設定をしており、「https://」と「github.com/...」の間に「ユーザーネーム:パスワード@」を追記することでパスワードを省いて移行することできます。

なのでアクセストークンを取得しても中々リポジトリを移行できずにいたのは、古いパスワードを設定したままであったからです。

なので「remote.origin.url=https...」の「ユーザーネーム:古いパスワード」のところを、「ユーザーネーム:アクセストークン」に置き換えることで、問題無く「push(移行)」できるようになります。

アクセストークンの取得方法は以下の公式サイトで分かります。

アクセストークンを取得済みの場合は、さっそく設定を変更していきます。

設定ファイルを書き換えるにあたり、失敗しても良いようにバックアップを取っておきます。

「cp」コマンドで設定ファイルである「config」ファイルを「backup_config」としてコピーします。

$ cp .git/config .git/backup_config
$ ls .git
COMMIT_EDITMSG  HEAD  backup_config  branches  config etc..

バックアップファイルが取れたら、リモート先のURLを変更します。

URLが分からない場合は、自身のGitHubアカウントページに飛び以下の場所からURLを取得します。

リモート先を変更するコマンドは「git remote set-url origin リモート先URL」です。

※パスフレーズ無し

$ git remote set-url origin https://ユーザーネーム:アクセストークン@github.com/ユーザーネーム/リポジトリ.git

※パスフレーズ有り

$ git remote set-url origin https://github.com/ユーザーネーム/リポジトリ.git

「git config --list」もしくわ「git remote -v」を実行して設定内容を確認してみます。

$ git remote -v
origin  https://ユーザーネーム:アクセストークン@github.com/ユーザーネーム/レポジトリ.git (fetch)
origin  https://ユーザーネーム:アクセストークン@github.com/ユーザーネーム/レポジトリ.git (push)

あとはリポジトリを変更するための工程を踏んでから移行するだけです。

$ git add .
$ git commit -m 'comment'
$ git push
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 511 bytes | 73.00 KiB/s, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
...
To https://github.com/ユーザーネーム/リポジトリ.git
   0065b11..e954d72  main -> main

これで今回の「2021年8月13日以降」問題に対応できたかと思います。

クローン側のレポジトリも同様に設定することで「pull」できるようになります。

ご覧いただきまして、ありがとうございます。