Windows-GitBashからgit pushして403エラー
背景
- Windows 11にGitBashを入れた構成
エラー発生までの経緯
- GitHubとの連携はusernameとpasswordの認証によってできていました
-
別でWSL2-UbuntuからGitHub連携のためにトークン発行したので、そのトークンをコントロールパネルの資格情報マネージャーに入れ直しGitBashからもGitHub連携できるようにしました。
- 挙動確認のために資格情報に入れたPWを変えてエラー内容確認し、もとのトークンに戻したら、403エラーに遭遇しました↓。
$ git push remote: Permission to kawasaki8108/AmazonLinux-doc.git denied to kawasaki8108. fatal: unable to access 'https://github.com/kawasaki8108/AmazonLinux-doc.git/': The requested URL returned error: 403
- (ちなみに資格情報マネージャーでPWに変更したら別のエラーになります↓。いわゆる認証方法トークンとかに変えてねということです。このあとトークンに戻しています)
$ git push remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication. fatal: Authentication failed for 'https://github.com/kawasaki8108/AmazonLinux-doc.git/'
改めて現状把握
GitHub連携のための認証情報をどこで保持しているかを以下のコマンドで確認できます。
$ git config --show-origin credential.helper
file:C:/Program Files/Git/etc/gitconfig manager
やっぱりコンパネの資格情報マネージャーであっていそうです。
いちおうgit clone
やgit pull
できるか試してみる↓と、問題なくできたので、おそらくトークンが間違っていることはなさそうです。(リモートリポジトリはなんでもいいです)
$ git clone https://github.com/kawasaki8108/AmazonLinux-doc.git
Cloning into 'AmazonLinux-doc'...
remote: Enumerating objects: 60, done.
remote: Counting objects: 100% (60/60), done.
remote: Compressing objects: 100% (43/43), done.
Receiving objects: 41% (25/60)used 50 (delta 9), pack-reused 0
Receiving objects: 100% (60/60), 17.92 KiB | 8.96 MiB/s, done.
Resolving deltas: 100% (13/13), done.
$ cd AmazonLinux-doc/
# ユーザー名@DESKTOP-FV4SS4B MINGW64 ~/AWS/AmazonLinux-doc (main)
$ git pull
Already up to date.
念押しで保持しているトークン自体の文字列も確認し、あってました。
$ git credential fill #対話モードになるので
protocol=https #この行と
host=github.com #この行を入力してエンター
#エンター
protocol=https #この行以下が表示します
host=github.com
username=kawasaki8108
password=github_pat_11BA~~~~~~~ #このトークンも発行したもので、あっていました
設定が足りていないのだろうと思います。(いままで問題なかったのに何で新たに設定するの?という気持ちはぐっとこらえます)
SSH接続
エラーメッセージ内容でググってみると同じような状況の記事を見つけられました。
そこで、トークン認証以外の方法を試している方の記事を参考にして、「SSHkey」を使ってSSH接続を試してgit push
を試みました。
参考記事)
わかりやすいようにユーザーホームディレクトリにある.sshに入り、公開鍵(id_rsa.pub)、秘密鍵(id_rsa)がまだないことを確認します。
$ cd #ユーザーホームディレクトリに戻ります
$ ls -a | grep ssh #.sshあること確認
.lesshst
.ssh/ #ある
$ cd .ssh
$ ls -a
./ ../ config known_hosts known_hosts.old project_key project_key.pub
#まだない↑。あったらこのあとで上書きされるでしょうから、念のためもあり現時点でbefore確認
鍵を生成していきます
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/ユーザー名/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/ユーザー名/.ssh/id_rsa #秘密鍵作られた
Your public key has been saved in /c/Users/ユーザー名/.ssh/id_rsa.pub #公開鍵作られた
The key fingerprint is:
SHA256:MYck*************************************** ユーザー名@DESKTOP-FV4SS4B
The key's randomart image is:
+---[RSA 3072]----+
| o.+o. . |
| =.. o .. .|
| .= o =. + |
| . = = .o +|
| .o.S . .. o.|
| . ..=.. o E |
| o + +o * . |
| . +.= oo.+ * |
| o.o.*o . . . |
+----[SHA256]-----+
$ clip < ~/.ssh/id_rsa.pub #公開鍵をコピーします
GitHub上に公開鍵をセットします。(公式はこちら)
- [Settings] > [SSH and GPG keys] > 「SSH keys」のところで[New SSH key]ボタン押します。
- さっきコピーした公開鍵を貼り付けます。タイトルはなんでもok。
- 入力完了したら[Add SSH key]で登録完了↓。
GitHub(=ホスト)にSSH接続するため、ホスト情報やその時使う鍵情報↓をconfigに登録します。AWS_EC2でいうところのキーペア使ってSSH接続するときのホスト情報を入れる感じです。
-
公式のいうとおり、
ssh -T git@github.com
で接続確認するので、そのコマンドとつじつま合うようにしています↓。@の前はユーザー名、後ろはホスト名ということで。 - config内のどこでもokですが、すでに記述しているホスト情報等あれば一番下か上に追記することがわかりやすいと思います。
Host github github.com #なんでもいい
User git #@の前にいれる
Port 22
HostName github.com #@の後ろにいれる
IdentityFile ~/.ssh/id_rsa #EC2へのSSH接続でいうところのkeypairの格納場所
設定できたので、テスト接続します。
$ ssh -T git@github.com
Hi kawasaki8108! You've successfully authenticated, but GitHub does not provide shell access.
公式に書いている通りのレスが来たので成功しました。
所定のリポジトリにcd
してgit push
します。
$ git push
remote: Permission to kawasaki8108/AmazonLinux-doc.git denied to kawasaki8108.
fatal: unable to access 'https://github.com/kawasaki8108/AmazonLinux-doc.git/': The requested URL returned error: 403
何がだめなのか、、、
公式にも書いてありました。SSH用のURLでないとだめだと。
[remote "origin"] url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git fetch = +refs/heads/*:refs/remotes/origin/*
現状確認してみると、、いつものURLです。。
$ git config remote.origin.url
https://github.com/kawasaki8108/AmazonLinux-doc.git
ということで、URLを設定しなおします。
$ git remote set-url origin git@github.com:kawasaki8108/AmazonLinux-doc.git
$ git config remote.origin.url
git@github.com:kawasaki8108/AmazonLinux-doc.git #設定できた
改めてgit push
します。
$ git push
Everything up-to-date
pushの必要性自体はないレスでしたが、エラーなくなったので解消完了です。
まとめ
- いままでSSH接続をしなくても問題なくpushできていたのですが、何を機に403エラーとなったのかはわかりませんでした。
- GitHubへのSSH接続の流れがつかめました。
- SSHkey生成自体の理解は以下の記事を参考にしました。
Discussion