LoginSignup
9
9

More than 5 years have passed since last update.

何度、SSH keysを設定してもPermission denied (publickey)される問題

Last updated at Posted at 2018-09-30

SSHでPermission Deniedが発生する

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

Please make sure you have the correct access rights
and the repository exists.

いつものようにgit pushすると問題が発生した。
まず、考えられたのは最近、Macを買い換えたためgitの設定に問題があること。
何度もSSHキーの再設定を行ない一時的に解決できたが、また出来なくなった。
そこで解決方法をまとめる。

MacBook Pro 2018 macOS Mojave, 32GB
ターミナルは、iTermを使用している

  1. SSHキーの認証状態
  2. gitconfigの確認
  3. ~/.ssh/configの確認
  4. ssh -T git@github.com は通るか
  5. known_hostsの確認

1.SSHキーの認証状態

https://help.github.com/articles/error-permission-denied-publickey/
GitHub公式の『Error: Permission denied (publickey)』トラブルシューティングに沿って行う
スクリーンショット 2018-09-29 23.59.13.png

ssh-agentを通して実際が使われているのか確かめると
The agent has no identifies.となる。実は、これ前に一時的に解決できたときも同じようになった。
再起動するたびにThe agent has no identifies.となるのは腹が立つ。

sshの秘密鍵登録を
ssh-add ~/.ssh/id_rsa
にしているはずなのに、毎回再起動するたびに
ssh add -lすると
The agent has no identities.
になってしまい、毎回鍵登録しないといけないのかと悩んでいました。
ssh-add -K ~/.ssh/id_rsa    を入力。
一応これでgithubのpushもssh認証されて問題なく突破。やったね。
と思いきや...
再起動して ssh add -l すると
The agent has no identities.
他のサイトで確認したとところ
~/.ssh/configに
UseKeychain yes
AddKeysToAgent yes
でイケる

引用元
http://tktechblog.hatenadiary.jp/entry/2017/10/09/105702

とのことです。これやったけど、
まだ接続できねええええええ\(^o^)/

2.gitconfigの確認

スクリーンショット 2018-09-29 22.07.46.png

キーワード 内容
Host ホスト名
HostName ホストのアドレスかIPアドレス
User ログインユーザ名
IdentityFile ログインするための秘密鍵のパス
Port ポート番号(デフォルトは22)
TCPKeepAlive 接続状態を継続したい場合:yes 継続しない場合:no
IdentitiesOnly IdentityFileが必要な場合:yes 必要ない場合:no
ServerAliveInterval 一定期間サーバからデータが送られてこないときに、タイムアウトする秒数。(例) 120

gitignore_globalとは,Gitで管理する全てのフォルダに適用されるgitignoreのようなファイルです

3.~/.ssh/configの確認

スクリーンショット 2018-09-29 22.08.21.png

4. ssh -T git@github.comは通る

スクリーンショット 2018-09-29 23.18.58.png

SSH オプション 内容
-i 秘密鍵を指定
-p ポート番号を指定
-l ログインユーザー名を指定

5. known_hostsの確認

サーバーにSSH接続すると.ssh/known_hostsファイルにサーバーのホストキーが追加されます。新しいサーバーに接続する時は確認されるし、ホストキーがknown_hostsに記載のものと変わっていると接続できません。
このホストキーのチェックは、sshのオプションで無効にできます。

ssh -o StrictHostKeyChecking=no server-name

これでknown_hostsを気にせずにアクセスできます。バッチ処理のシェルスクリプト等でパスフレーズ無し秘密鍵を使用しているような時、役立つことがあるかもしれません。

ここでfingerprintが異なることに気づく

スクリーンショット 2018-09-30 14.24.09.png
こちらが #1を考慮してもう一度ssh-agentにキーを登録して確認した際のfinger print
スクリーンショット 2018-09-30 14.29.17.png
そして、こちらが実際にgit pushした時の挙動
known_hostsを削除してから接続するため確認が出るが、finger printが異なっている

RSA fingerprintとは

fingerprintとは
鍵を識別するための情報。いわゆる電子指紋。
https://qiita.com/hotpepsi/items/128f3a660cee8b5467c6
こちらの記事が詳細に解説している

もう分からないから、またSSH新規発行&登録するw

スクリーンショット 2018-09-30 20.39.12.png

ssh -T git@github.comで見られるRSA key fingerprintと秘密鍵を作った際のfingerprintは、今回も異なった。これは嫌な予感。ここでgit pushすると、予感は的中。またもやpermission deniedされた。

負けじと食らいつくと気になる点を見つけた。
Changing a remote's URL
https://help.github.com/articles/changing-a-remote-s-url/

スクリーンショット 2018-09-30 21.17.43.png

If you're updating to use HTTPS, your URL might look like:

https://github.com/USERNAME/REPOSITORY.git

If you're updating to use SSH, your URL might look like:

git@github.com:USERNAME/REPOSITORY.git

この、どちらかになるはずだが僕の場合、github.comからリンクが始まっている。

スクリーンショット 2018-09-29 22.07.46.png

ということでgitconfigを見ると
https://github.com/とgit@github.com:がgithub.com:になるよう設定されてしまっている。
何で、こんな見落とし気付かなかったんだ!!!!!!

以前のPC、数年前にgit周りを設定しており方法を忘れていた。
またSSH周りの知識が不十分であったため自分でも何をしているのか
設定チュートリアルをやる中で分かっていなかった。

P.S.
普段、コーディングする時にググって実装したら終わっており
新しく学んだ実装法や知識が抜け落ちていくのでこれからQiitaに覚書をしていきたい。

SSHに関してよくまとめられた記事

eval(イーバル)はいくつかのプログラミング言語が持つ、文字列を式として評価する関数、または複数の文をプログラム中のあるコンテキストで実行するサブルーチン

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9