古い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への接続
エラーの内容
エラー・メッセージで示されている以下のページを見てみました。
2020年7月に、認証されたすべてのGit操作にトークンベースの認証(個人アクセス、OAuth、GitHubアプリインストールトークンなど)の使用を要求する意図を発表しました。 2021年8月13日以降、GitHub.comでGit操作を認証する際にアカウントパスワードを使用できなくなります。
パスワードが使えなくなるのは知っていたので、既にSSH接続に切り替えています。
しかし、ユーザー名/パスワードの入力画面が出たので、どうやらアクセス・トークンによる認証が行われているようです。
SSH接続
自分のページでも、SSH接続での方法を説明しています。
また、改めて以下のページでも確認しました。
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の認証方法変更・・・」のページに、以下のヒントがありました。
もしかして、リポジトリがHTTPS接続になっているために、SSH認証ではなくアクセス・トークン認証が使われているのではないか。
問題への対応
git remoteコマンド
先ず、git remoteコマンドを調べました。
Githubの次のページに、リモートリポジトリを管理するコマンドとして説明されています。
https://docs.github.com/ja/get-started/getting-started-with-git/managing-remote-repositories
ただ、ちょっとだけ分かりづらかったので、以下のページも参考にさせていただきました。
リモートリポジトリの確認
早速、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 で接続できなくて驚きましたが、何とかなりました。