【エラー】githubにpush時に"Permission denied (publickey)."と言われ、解決するまでに使ったコマンドを調べた

いつも通りgithubに`$ git push`しようとしたら下記のようなエラーが出たので
解決するまでの話しを記録しておきます。
誰かの参考になれば幸いです。

#結論
結論、原因不明でした。
手元に秘密鍵もあり、git側にも公開鍵があり、とりあえず鍵の再作成に取り組んだら
なぜか解決したという情けない結末でした。


何もしてないしgit側の公開鍵がきえたんじゃないの〜?と思って下記記事に従って確認したら存在しました。疑ってごめんね。
https://docs.github.com/ja/github/authenticating-to-github/error-permission-denied-publickey

ちなみに他に同じ様な事象が起きて｢一年放っておいたら公開鍵が消えた｣という人がいましたが、
それはその通りみたいです。
https://docs.github.com/ja/github/authenticating-to-github/deleted-or-missing-ssh-keys


ということでよくわからないのですが、とりあえず秘密鍵を再度作成することで解決しましたので
その軌跡と過程で調べたことを記します。

#参考
まず当記事と同様に解決策を記した記事は多数あるので、私が参考にしたサイトを貼っておきます。
ありがとうございます〜！<br>

▼参考:【git pushエラー】: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. の対処策
https://papa-programing.jp/git-push-error/#git%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AF%E3%80%8E%E3%82%B5%E3%83%AB%E3%81%A7%E3%82%82%E3%82%8F%E3%81%8B%E3%82%8Bgit%E5%85%A5%E9%96%80%E3%80%8F%E3%81%8C%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%A7%E3%81%99

今回はこの記事の中にあるコマンドがよく分からなかったので調べました。


#エラー
```Terminal
Permission denied (publickey). #権限を拒否されました(公開鍵)。
fatal: Could not read from remote repository. #リモートリポジトリが見つかりません。

Please make sure you have the correct access rights 
and the repository exists.　#本当にリモートリポジトリが存在するか、正しいアクセス権があるか確かめてください。
```
と言われました。
今まで問題なかったのに突然何さ


#エラーを紐解いて解決してゆく
###Could not read from remote repository.
などと言うのでまずリモートリポジトリが存在することを確認します。
読めないってなにさ。
####$ git remote -v
`$ git remote`で、現在登録されているリモートの一覧を表示。
-v オプションを付けると, リモートの名前に加えて Fetch URL と Push URL も表示。

git remoteはリモートリポジトリと任意の名前を紐付けるコマンドです。
デフォルトだとリモートリポジトリは`origin`となっていますがこれも変更することが可能ということですね。

基本構文:
`$ git remote [<subcommand>] [options] [arguments]`
▼参考
https://yu8mada.com/2018/06/06/how-to-use-git-s-remote-command/#:~:text=git%20remote%20%E3%81%AF%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A7%E3%81%AF,%E3%82%92%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%81%99.

結果↓

```
origin	git@github.com:tkhashi/ALLE_IDEA.git (fetch)
origin	git@github.com:tkhashi/ALLE_IDEA.git (push)
```

あるじゃんか〜
ということでリモートリポジトリはありましたので次。

###Please make sure you have the correct access rights and the repository exists.
リモートリポジトリ自体の存在は確認できたので、アクセス権がない方で考えるしかない。

#公開鍵を作成し直す
### $ ssh-keygen -t rsa -C "xxxxx@gmail.com(登録しているアドレス)"
`ssh-keygen`でssh(Sure SHell)接続用の秘密鍵と公開鍵を作成できる。
ここで作成した公開鍵をgithubに渡しておくことで、ペアになる秘密鍵を知っている自分だけが通信できるようになる。

#####オプション -t:
方式の指定。
作成する鍵の暗号化形式を「rsa」（デフォルト）、「dsa」「ecdsa」「ed25519」から指定する
RSA以外の方式はいつ使うのか…?

これらは暗号化アルゴリズムを指しているようです。
･RSA　　……最も普及しており、サポートも充実。
･dsa　　……鍵長が短く、強度が弱いみたいです。1024bits固定で、サポートしていないハードウェアが多いく、好んで使う理由がない。 ecdsaはdsaの改良版だそう。
･ed25519……強度が高く、今後使用する機会も増えるかも…とのこと。


これ以上詳しいことは理解が追いつきませんでした。。。
いつか追記したいです。

▼参考:sshが使用するRSA、DSA、およびECDSAキーの違いは何ですか？
https://www.it-swarm.dev/ja/ssh/ssh%E3%81%8C%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8Brsa%E3%80%81dsa%E3%80%81%E3%81%8A%E3%82%88%E3%81%B3ecdsa%E3%82%AD%E3%83%BC%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/961572839/
▼参考:sshキーのキータイプはなにがいいのか
https://gensasaki.hatenablog.com/entry/2018/07/26/091209

#####オプション -C
コメントを指定する（デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除）

▼参考:【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する
https://www.atmarkit.co.jp/ait/articles/1908/02/news015.html

とりあえずこれで公開鍵と秘密鍵を作成できた?ようです。

#結局
しかし、この先が各記事と違う流れになるのですが
ここで

```
[20/08/2910:44:32[vagrant@localhost ALLE_IDEA]$ ssh-keygen -t rsa -C "xxxxxx@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
```
となってpushできるようになりました。。
なぜ…?



全く原因がわかりませんでしたが、個人的にはssh通信について少し復習できたのでよかったです。