この記事について
git pushしようとしたら、下のような403エラーが出ました。
remote: Permission to <アカウント名>/<リポジトリ名>.git denied to <アカウント名>.
fatal: unable to access 'https://github.com/<アカウント名>/<リポジトリ名>.git/': The requested URL returned error: 403
- windows資格情報を削除する
-
git config
でユーザ情報を変更する - リモートリポジトリのURLをhttps://@github.com/<アカウント名>/<リポジトリ名>.gitにする
など試してみましたが解決できませんでした。
2つgithubアカウント(学校用と私用)があり、これの切り替えが原因であろうと思うのですが、そこから先は分かりません。
そこで方針を変えてSSHでの接続を試みることにしました。
その際の備忘録です。
筆者環境
Ubuntu on windows(Ubuntuのバージョンは20.04)
やったこと
手順1 鍵生成
下のコマンドでSSH鍵を生成します。
cd ~/.ssh
ssh-keygen -t rsa -C "<githubアカウントのメールアドレス>" -f "<鍵のファイル名:任意>"
passphraseを何にするか聞かれます。無くてもエラーにはなりません。
SSH接続のパスワードのようなものだと思います。
ssh-keygenのオプションについて補足しておきます。
オプション | 説明 |
---|---|
-t | 暗号化方式 |
-C | コメント 公開鍵の末尾に書き込まれます。 |
-f | 鍵のファイル名 |
そうすると~/.ssh
下に<鍵のファイル名>
と<鍵のファイル名>.pub
という2つのファイルが出来ます。前者は秘密鍵、後者は公開鍵が書き込まれています。
手順2 ssh鍵をgithubに登録する
公開鍵(<鍵のファイル名>.pub
の中身)をクリップボードにコピーします。
方法は何でもいいですが、例えば下記のコマンドなどでコピーできます。
cat <鍵のファイル名>.pub | clip.exe
そうしたらブラウザでgithubを開き、settings > SSH and GPG keys > New SSH Keyの順でクリックしてSSH鍵追加画面を開きます。
各項目を入力します。
Titleは任意のものを、Key typeはAuthentication Keyを選択します。
Keyにはクリップボードにコピーしている公開鍵を貼り付けます。
そうしたらAdd SSH keyボタンを押して登録を完了します。
手順3 ~/.ssh/config
を設定する
~/.ssh/config
は秘密鍵はどのファイルにあるか、ホストは何かなどの設定を書きこむファイルです。
下を追加します。
Host <接続名:任意>
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/<鍵のファイル名>
TCPKeepAlive yes
IdentitiesOnly yes
gitが、~/.ssh/<鍵のファイル名>
の中身を秘密鍵として用いて、22番ポートで、github.comに接続するという意味です。
手順4 gitのconfigをいじる
下のコマンドでリモートリポジトリのURLを設定します。
git remote set-url origin git@<接続名>:<アカウント名>/<リポジトリ名>.git
手順4 接続する
下のコマンドでSSH接続します。
ssh -T <接続名>
結果
Hi <githubのアカウント名>! You've successfully authenticated, but GitHub does not provide shell access.
完了
これでgit push出来るようになりました。
参考
403エラー関連
windows資格情報削除で解決した方
git pushで自分のレポジトリへのアクセスが403で拒否される対処法 Remote: Permission to user1/repo denied to user2
urlを書き換えで解決した方
git pushで403のエラーが返ってくる問題
SSH関連
【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する
【2021年以降】コマンドラインからgithubにpush/pullすると接続エラーになる
【GitHub】複数GitHubアカウントのSSHキーを管理する。