GitHubに新規プロジェクトが「Permission denied」によりpushできない場合の設定方法【Windows編】

October 27, 2020

どういうわけかいつもの手順で行うと「git@github.com: Permission denied (publickey).」が出るようになったので解決する。

github_denied

目次

環境

Windows 10環境。

GitHubのユーザー名などの設定は終わっている。

いつもの手順でアクセスが弾かれる?

GitHubのWEBサイトにて新規プロジェクトを作成

プロジェクトのトップページにてローカルのプロジェクトのコマンドラインが書いてあるので手順通りに実行。

今までならこれでいけるハズなのだが....

ちなみに手順は次

git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:{ユーザ名}/{プロジェクト名}.git
git push -u origin main

この状態でローカルにてcommitしてpushすると

次のメッセージで失敗する

git@github.com: Permission denied (publickey).

いままでもっとサクっと行った気がしたが内部の難しいところはよくわからない。

セキュリティのレベルが変わったのだろうか?

SSH認証に変更すればOK

とにかく難しい話は置いておいて従来の認証方式ではなくssh認証の手順に変更することで正しくプッシュできる。

要するにこれをやればあなたのPCにある鍵ファイルとGitHub側の鍵ファイルをいい感じの演算を元に照らし合わせることによってアクセスできるよといった感じ。鍵ファイルが漏れなければかなり強固(たぶん)

一度設定してしまえばずっと使える。

.sshフォルダにキーを生成する

次の場所に.sshフォルダを作る。

私の場合すでに存在した。

C:\Users\ユーザ名\.ssh

.sshフォルダ内で次のコマンド

ssh-keygen

※こちらはgitをインストールすると一緒に入るコマンドらしい。

あとはエンターを何度か押して全てスキップしてOK。

途中パスワードを聞かれるが不要。公開鍵認証方式の時点でかなり強固なのでパスワードは設定しなくても良い。それでもセキュリティが心配な場合は設定する。

同フォルダ内に次のファイルが増えているはず。

image-20201027141021108

  • id_rsa
  • id_rsa_pub

基本的にはLinuxでもWindowsでも同じファイル。

GitHubにログインしてキーを追加

id_rsa_pubを開いて中身をクリップボードにコピーしておく。

まずはログインして対象のプロジェクトに移動

次のURLにアクセス

https://github.com/settings/keys

New SSH Keyをクリック

image-20201027141846948

適当なタイトルを入れて先程コピーしたid_rsa_pubの内容をKeyにペースト

image-20201027142007021

メールにてSSHキーが追加された旨のメッセージが送られてくる。

これでSSHの設定は完了

接続できるかテスト

次のコマンドでテストできる

ssh -T git@github.com

成功すれば次のようなメッセージ。

Hi CrypticToilet! You've successfully authenticated, but GitHub does not provide shell access.

CrypticToiletは私のアカウント名

鍵の名前をデフォルトから変更していると失敗するらしい。

pushする

冒頭で書いたgit initの手順でpushする。

余談だがssh認証でpushする場合は

git remote add origin git@github.com:{ユーザ名}/{プロジェクト名}.git

のようにgit@github.comから始まるものを指定する必要がある。httpsでいくと恐らく失敗する。

完了

実際のローカルプロジェクトのgitには一切手を加えること無くこれで認証が通った。

Linuxでも基本は同様の手順で行えるので覚えておきたい。

余談:別の端末でgit cloneする時に失敗

上記の方法でGitHubのリポジトリにpushした後に別のLinux環境からcloneしようとするとなぜか弾かれる。

アカウントは同じでssh認証も終わっている。

鍵が別なのがだめなのだろうか。

ともかくこの場合httpsの方法でcloneできた。

あくまで余談pushできるかは試していない。

Tags

この記事をシェア:

author icon

仮想トイレ @CrypticToilet
プログラミングや仮想通貨のシステムトレードに関する情報を更新中!どんな情報を流しても詰まらないトイレ。