git pushしたらPermission denied (publickey)と出た際の原因と対策
こんにちは、カイノです。
今日(1/26)からRailsチュートリアルを学習開始しました。
1.4.4 ブランチ、編集、コミット、マージの章を進めていて、
git push ができなかったため、これに対しての原因と対策+α行ったことを書きます。
2時間くらいメンターさんと一緒に悩んだ末に解決しました(泣)
さっそく結論から
原因
「ssh-keygen」の2回目の実行後に公開鍵をBitbucket(もしくはGitHub)に登録しなかったから。
つまりどういうことか説明致します。
Gitリポジトリを扱うGitHubとBitbucketのどちらのサービスでも、ローカルとSSH接続する際に公開鍵が必要になります。
RailsチュートリアルではAWSのEC2上でBitbucketを使用しています。
ローカル(EC2)上で公開鍵を取得し、Bitbucket(or GitHub)に登録するやり方は下記リンクを参考にしてください。
https://qiita.com/konuma1022/items/986eb58d4b94bef0c0a5
https://qiita.com/ksugawara61/items/a4f34e5e120bea1732d5
ここまでは良かったのですが、問題はこのあとにあります。
一度公開鍵を作成した後、確認と練習を兼ねてもう一度公開鍵を作るコマンド「ssh-keygen」を行いました。
その後、作成した練習用鍵は削除しました。←これが根本原因です。
なぜこれが原因かと言いますと、
「ssh-keygen」を2回行うと1回目に作成したkeyが上書きされるからです。同名ではないkey名を指定したはずですが、おそらくkey名を変えても上書きされる仕様なのかと思われます。
ssh配下に2つの公開鍵があります。
・1回目に作成した「ec2_bitbucket_key.pub」
・2回目に作成した「id_rsa.pub」
別名ですが、ここでは最後に作成した「id_rsa.pub」が有効なSSHアクセスキーになります。
不要と判断して削除してしまったので、このままgit pushをしても公開鍵を使う権限が無いですよ〜とメッセージが返ってきます。
つまり公開鍵が上書きされていますので、古い公開鍵を使ってgit pushしてもPermission denied (publickey)ということになります。
対策
新たに「ssh-keygen」を実行し、作成した公開鍵をBitbucketに登録。
以下のリンクを参考に行いました。
https://qiita.com/hikaru-light/items/be46dfab4e52ee55a134
すると問題なくgit pushできました。
行ったけど無駄だったこと
※大変勉強にはなりました。
それぞれの下記に貼ってあるリンクを参考に行いました。
①公開鍵の存在確認とBitbucket側の設定確認
https://qiita.com/katsukii/items/c3df0653ac07d41fe03f
③公開鍵をauthorized_keysに設置
https://qiita.com/youcune/items/2f427979403771f2e03a
④接続先のサーバで所有者とパーミッションが適切に設定されていることを確認
https://qiita.com/youcune/items/2f427979403771f2e03a
⑤known_hostsからエントリを消す
https://kiririmode.hatenablog.jp/entry/20171020/1508485674
⑥Linuxの権限確認と変更(chmod)
https://qiita.com/shisama/items/5f4c4fa768642aad9e06
などなど行っていました。長いのでそれぞれの説明は割愛します。気になった方はリンク先をぜひ覗いてみてください。
色々と(自分から見て)高尚なことを行っていましたが、結局は超初歩的な公開鍵の更新忘れというものでした。
何事も基本が肝要ということでしょうか。。。
それにしてもまさか複数回別名で取得した鍵が更新されるとは驚きです。
今回のエラーを通して様々な対処を行うことができました。
おかげさまで少しだけエンジニア力高まった気がします。協力してくださったメンターさんには感謝の極みです。
MPはがっつり減って、
親切なメンターさんに「ちょっと休憩しますか」っていつ言おうか考えていたクズっぷりです。・・・汗
まとめ
公開鍵の取得を複数回行ったら最後に作った鍵を使ってGitHubなり、Bitbucketに登録する。