Git で以下のエラーが出た時にやったこと。
Bad owner or permissions on ~/.ssh/config
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
このエラーの前提
普段とは異なる環境からの SSH 接続。PCの買い替えや再インストール、クラウドの使用など。
結論
結論から書くと、sshの公開鍵,秘密鍵を再発行してgithubに登録して、configファイルにも記載して、エラーが解決したのでその方法を書きます。
再現
プロジェクトディレクトリを作成し、
### Gitで管理しますよっていうコマンド
$ git init
### 現在のディレクトリ以下をstagingリポジトリに追加
$ git add .
### 現在のstagingリポジトリに登録されている内容をコミットする。(メッセージ付き)
$ git commit -m "Initialize repository"
### githubで作成したリポジトリをoriginのリポジトリとして追加する
$ git remote add origin git@github.com:Username/repositoryname.git
とし、
### 現在登録されているリモートのリポジトリを確認する
$ git remote -v
-> remoteがaddされていることを確認
#-------------------
origin git@github.com:Username/repositoryname.git (fetch)
origin git@github.com:Username/repositoryname.git (push)
#-------------------
リモートのリポジトリがoriginとして登録されているので、
### originのリポジトリにプッシュする
$ git push -u origin --all
-> 突然のエラーメッセージ
#-------------------
Bad owner or permissions on ~/.ssh/config
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
#-------------------
なにやら**.ssh/config**周りが怪しいとのことです。
調べてみたら、sshKeyの再発行で解決するとのことで、実施することにしました。
解決方法
###まずはsshKeyを再発行します。
### sshKeyを作成する。 (hoge以降はgithubに登録しているメアド)
$ ssh-keygen -t rsa -C hoge@example.com
-> 作成するディレクトリとファイル名を聞かれる。~/.ssh/id_rsaとなっていれば、なにも入力しないでenterでおk。
#-------------------
Enter file in which to save the key (~/.ssh/id_rsa):
#-------------------
-> パスフレーズ(パスワードより長いキーワード)を登録するかと聞かれるので、特に必要なければ何も入力しないでenterでおk。
#-------------------
Enter passphrase (empty for no passphrase):
#-------------------
-> もう一度同じパスフレーズを入力してくださいと聞かれるので、また何も入力しないでenter。
#-------------------
Enter passphrase (empty for no passphrase):
#-------------------
### ~/.ssh以下のファイルを確認する
$ ls ~/.ssh
-> id_rsaとid_rsa.pubがあることを確認する
#-------------------
id_rsa id_rsa.pub
#-------------------
次に、githubに公開鍵を登録します。
前のステップで、作成された、id_rsaが秘密鍵で、id_rsa.pubが公開鍵です。
公開鍵,秘密鍵とかってなんぞや
ここに詳しく載ってますが、とりあえずなんとなくだけ知りたいという方は読み進めてください。
【図解】初心者も分かる”公開鍵/秘密鍵”の仕組み~公開鍵暗号方式の身近で具体的な利用例やメリット〜
公開鍵とか秘密鍵とかってなんぞやっていう方に簡単に説明をすると、
公開鍵暗号方式という認証システムを使うのに必要な鍵のことです。
簡単に公開鍵認証について説明すると、アクセスしたい人が公開鍵と秘密鍵を発行し、公開鍵をアクセスを許可する側に渡して共有します。
その後で、アクセスしたい人が、自分が発行したその公開鍵と対応する秘密鍵を使うことで、公開鍵を持っているアクセスを許可する側の人にアクセス出来る!という認証システムです。
今回では、github側がアクセスを許可する側で、ユーザー側がアクセスをしたい人側です。
なので、前のステップで秘密鍵と公開鍵を発行しました。
というわけで、この後にすることは、github側に公開鍵を登録するという作業になります。
それでは、githubに公開鍵を登録します
Githubにログインして、右上の自分のアイコンをクリック, Settings > SSH and GPG keys > New SSH keys をクリックします。
Titleの欄に何に使う為なのか、わかるように名前をつけてあげます。(会社用Macbookとか、AWS cloud9 とか)
次に、Keyの部分は、一旦ターミナルに戻り、公開鍵をコピーしてきます。
### 公開鍵が保存されているファイルの中身を表示する。
$ less ~/.ssh/id_rsa.pub
-> 公開鍵が表示されるので、範囲選択してコピーする。(最後ののメールアドレスはコピーしない)
#-------------------
ssh-rsa hogehogehogehoge...~~略~~...hogehoge mail@example.com
#-------------------
Githubに戻り、Keyの部分にコピーした内容をペーストして、Add SSH Keyをクリックすれば、Githubに公開鍵を登録できます。
最後に、使用する秘密鍵をconfigファイルに設定する。
最後にターミナルに戻り、configファイルに使用する秘密鍵を設定してあげます。
vimコマンドが使える前提で進めてしまいますが、使えない場合は適宜対応してください。
### vimを立ち上げて~/.ssh/configを編集する。
$ vi ~/.ssh/config
-> 何も表示されていない場合は、下記内容をコピペする。
-> configファイルが既に存在する場合は下記内容を追記する。
#-------------------
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa
User git
#-------------------
# iでインサートモードになる
# インサートモードからescを押した後、:wqで保存して終了する。
これで、問題なく使えるようになるはずです。
最後に、プッシュしてみます。
### originのリポジトリにプッシュする
$ git push -u origin --all
-> プッシュできることを確認
#-------------------
Counting objects: hoge, done.
Compressing objects: 100% (hoge/hoge), done.
~~ 略 ~~
master from origin.
#-------------------
これで問題なくoriginにプッシュすることができました!
PCを変えたり、クラウド環境を新しくするたびにぶち当たって毎回調べていたので今回まとめてみました。
ご覧いただきありがとうございます。