Blog

GitHub Permission denied (publickey).fatal: Could not read from remote repository.

GitHubにて、2022/3/15よりDSAの鍵はサポートされなくなりました。

上記エラーはSSHの鍵があっているなら、MACでは、パーミッションの問題のことが多いと思います。

またBackLog等、GitHubを2箇所、別のアカウントで登録する方法についてもまとめています。

GitHubでのSSH Key登録についての注意点

  • 1 ecdsa方式で作成する
  • 2 秘密鍵生成時は パーミッションが500になっているので 400に変更する
  • 3 秘密鍵を作成したあとにローカルPCの ssh-agent に秘密鍵を登録する必要がある。
  • 4 GitHubに公開鍵を登録する コマンドでコピーすること!

秘密鍵の作成

//このコマンドを入力
ssh-keygen -t ed25519  -C  "GitHubの登録Email"

//ここでkeyの名前を入力できる 
//作成してからあとから名前変更すると、接続できなくなる このkeyの名前で、sshに登録しているため
Enter file in which to save the key (/Users/me/.ssh/id_ecdsa):

//パスワードは省略可能 今回は省略した形式ですべて説明しています。ご注意ください。
Enter passphrase (empty for no passphrase):

//パスワード利用する場合はもう1回
Enter same passphrase again:

SSH keyをssh-agentに追加する

  • 注意! homebrewでインストールしたsshなどを利用しないこと MACのデフォルトを利用すること
  • 確認するには brew list | grep ssh でなにも表示されなければ問題ない
  • 表示されれば brew uninstall すること
$ eval "$(ssh-agent -s)"
> Agent pid 59566 //この番号はプロセスIDなので毎回異なる

~/.ssh/config ファイルを修正して、キーが ssh-agent に自動的に読み込まれ、パスフレーズがキーチェーンに格納されるようにする必要がある

Host github.com
  AddKeysToAgent yes  # 自動的に読み込まれるように設定する
  # UseKeychain yes // パスフレーズを追加する場合のみついかする
  IdentityFile ~/.ssh/id_ed25519 //これは作成した秘密鍵の名前に変更する

SSH 秘密鍵を ssh-agent に追加して、パスフレーズをキーチェーンに保存します。


ssh-add  ~/.ssh/id_ed25519 #ssh keyの名前 

#パスフレーズを登録した場合
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 # ssh keyの名前

SSH秘密鍵と、フォルダのパーミッションを変更する

//秘密鍵は400
chmod 400 [秘密鍵の名前]


//確認する
ls -la 


//ここがrだけだと400ということ => OK
-r--------   1 userName  staff   525 10 20 10:42 id-rsa_xxxxxxxxx

//configファイルは644
chmod 644 config

.sshのconfigファイルのサンプル

configファイルの権限は644にしておく

初回 git で接続するときにgit クライアントがconfigファイルを読み込まないといけないため

Host github   //Hostの名前で、接続できるようになる。 例)ssh github 自由な名前をつけることが可能
  HostName github.com //これは定数だと思うこと

  User git  //Userはgitにする 後のbacklogに登録するときはbacklogのuser名にする                         

  AddKeysToAgent yes  //key-chainに格納している

  IdentityFile ~/.ssh/id_rsa4094_github  //作成した秘密鍵

SSH公開鍵をGitHubに登録する

SSH 公開鍵をクリップボードにコピーする

  • 注意! 空白や改行がないとうまく行かないので、コマンドでコピーしたほうが良い
  • エディターを開いてコピペするとうまく行かないことが多い
pbcopy < ~/.ssh/id_ed25519.pub
  # Copies the contents of the id_ed25519.pub file to your clipboard

GitHubのsetttingから登録する

接続の確認をする

//-Tはテスト
$ ssh -T github

//成功するとこのようなメッセージがでる
Hi ! You've successfully authenticated, but Backlog does not provide shell access.

Backlog等 に接続 2つ目のgitアカウントにて接続する場合の設定

Hostの名前を確認する

//gitを利用したいフォルダにて 
 git config remote.origin.url

//このように表示されるはず
git@github.com:[Username]/[RepositoryName].git

ここの@よりあとから:コロンの前までを、上記configファイルのHostに設定すること

更にHostの設定も大切

通常Backlog のssh URLはこのようになっている

[UserName]@[バックログ.git.backlog.com]:/[someName]/[something].git

この@の後ろから、コロンの前までをHostに設定する

Host [バックログ].git.backlog.com
  HostName [バックログ].git.backlog.com
  User [UserNameを設定する]

//複数githab アカウントを利用するとき必要
  IdentitiesOnly yes
  IdentityFile ~/.ssh/id_ed25519_somename

IdentitiesOnly yesにしておくこと。
これを設定しないと、すべてのssh鍵を読み込みに行く。 なので意図したアカウントにアクセスできなくなる。 特定のuserでBacklogにアクセスするので、大切

別のアカウントで接続してみる。フォルダに移動してgit config の設定を変更する

そこのフォルダ内だけは、githubの2つ目のアカウントを利用する想定

–localはそのフォルダ内だけに適用される設定。

git config --local user.email [登録したいEmail]  //""ダブルクオーテーションは必要ない

git config --local user.name [2つ目のgitのUserName]

参考にさせていただきました。

公式サイト

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#adding-your-ssh-key-to-the-ssh-agent

https://note.nkmk.me/git-config-setting/


一つ前の記事 日本がITに弱い理由-100点を目指す国
次の記事 CloudRunで カスタムドメインを設定する