プログラマ・アゲイン blog

還暦を過ぎたけどプログラマ復帰を目指してブログ始めました

古いGitリポジトリ―をGithubにpushしようとしたらセキュリティに引っ掛かりました

暫く放置していたので、パソコンのローカルGitで管理しているリポジトリGithubにアップロードして、GitとGithubの同期を取っておこうと思いました。

しかし、今までの手順で git push しようとしたところ、ユーザー名/パスワードを聞いてくる画面が表示され、Githubにログインする時のユーザー名/パスワードでは拒否されて、以下のようなメッセージが出てしまいました。

$ git push origin master
Logon failed, use ctrl+c to cancel basic credential prompt.
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/ユーザー名/リポジトリ―名/'

 

いろいろググって何とか解決したので、忘れないようにメモしておきたいと思います。

Githubへの接続

エラーの内容

エラー・メッセージで示されている以下のページを見てみました。

github.blog

2020年7月に、認証されたすべてのGit操作にトークンベースの認証(個人アクセス、OAuth、GitHubアプリインストールトークンなど)の使用を要求する意図を発表しました。 2021年8月13日以降、GitHub.comでGit操作を認証する際にアカウントパスワードを使用できなくなります。

 

パスワードが使えなくなるのは知っていたので、既にSSH接続に切り替えています。

しかし、ユーザー名/パスワードの入力画面が出たので、どうやらアクセス・トークンによる認証が行われているようです。

 

SSH接続

自分のページでも、SSH接続での方法を説明しています。

pagain.hatenablog.com

また、改めて以下のページでも確認しました。

halzoblog.com

SSH接続が出来なくなったのかと、以下のコマンドで確認しましたが、正しく機能しているようです。

$ ssh -T git@github.com
Hi ユーザー名! You've successfully authenticated, but GitHub does not provide shell access.

 

因みに、SSH AGENTが動いていないのかとも思ったのですが、これも当然正常に動いてました。

$ eval 'ssh-agent'
SSH_AUTH_SOCK=/tmp/ssh-OjNKtZFEViUd/agent.1073; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1074; export SSH_AGENT_PID;
echo Agent pid 1074;

 

しかし、ユーザー名/パスワード(アクセス・トークン)を聞いてくるのは何故か。

アクセス・トークン認証とSSH認証は、どちらか一方をすれば良いとの事だったのに、アクセス・トークン認証は必須なのかと悩みました。

ところが、前述参考にした「GitHubの認証方法変更・・・」のページに、以下のヒントがありました。

 

git remote set-url」コマンドで、接続をHTTPSSSHのいずれかに切り替える必要がある

 

もしかして、リポジトリHTTPS接続になっているために、SSH認証ではなくアクセス・トークン認証が使われているのではないか。

 

問題への対応

git remoteコマンド

先ず、git remoteコマンドを調べました。

Githubの次のページに、リモートリポジトリを管理するコマンドとして説明されています。

https://docs.github.com/ja/get-started/getting-started-with-git/managing-remote-repositories

 

ただ、ちょっとだけ分かりづらかったので、以下のページも参考にさせていただきました。

qiita.com

リモートリポジトリの確認

早速、git remoteのコマンドで、リポジトリのURLを確認してみました。

$ git remote -v
origin  https://github.com/ユーザー名/リポジトリ―名 (fetch)
origin  https://github.com/ユーザー名/リポジトリ―名 (push)

 

何と、GitHub Docsで説明されている、HTTPS使うURLになっています。

リポジトリ毎に接続方式があるというのを、初めて知りました。

てっきり、全体で一つだと思っていたので。(~ ~;)

これで原因がはっきりしたので、このURLをSSHを使うURLに変更します。

 

リモートリポジトリのURL変更

次のコマンドで、リモートリポジトリのURLをSSHを使用するものに変更しました。

$ git remote set-url origin git@github.com:ユーザー名/リポジトリ―名

 

ところが、再度確認してみると、(fetch)しか変更されていません。

$ git remote -v
origin  git@github.com:ユーザー名/リポジトリ―名 (fetch)
origin  https://github.com/ユーザー名/リポジトリ―名 (push)

 

これではやはりpushで引っかかるので、git remote --help でパラメータを調べました。

やはり、pushを指定するパラメータ --push が有りました。

 

push URLの変更

--pushを指定して、再度リモートリポジトリのURLを変更しました。

$ git remote set-url origin git@github.com:ユーザー名/リポジトリ―名 --push

 

確認すると、(push)についても変更されていました。

$ git remote -v
origin  git@github.com:ユーザー名/リポジトリ―名 (fetch)
origin  git@github.com:ユーザー名/リポジトリ―名 (push)

 

git pushの確認

リモートリポジトリのURL変更が出来たので、再度pushをしたところ、以下のように正常にGithubにアップロードされました。

$ git push origin master
Enumerating objects: 2, done.
Counting objects: 100% (2/2), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 384 bytes | 384.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To github.com:ユーザー名/リポジトリ―名
   06fbad2..c5a4dfd  master -> master

 

最初 push で接続できなくて驚きましたが、何とかなりました。