【Railsチュートリアル第一章】BitbucketでPermission denied (publickey)と言われたときの対処法


はじめに

※この記事は現在Railsチュートリアルに取り組んでいる方向けの記事です。

先日、生徒さんから

「RailsチュートリアルのBitbucketの設定でつまづいてしまいました。。。」

と質問されました。

無事に解決できたのですが、せっかくなのでその解決方法をまとめようと思い、記事にすることにしました。

生徒さんからいただいた質問の内容

======
【ご質問】
@ウェブ系ウシジマくん

RailsチュートリアルのBitbucketの設定でつまづいてしまいましたので、アドバイスを頂戴したく。

◯つまづいた箇所
Bitbucketへのリポジトリ追加とプッシュができない

◯エラーログ


ec2-user:~/environment (master) $ cd hello_app
ec2-user:~/environment/hello_app (master) $ git remote add origin [email protected]:ec2-user/hello_app.git
fatal: remote origin already exists.
ec2-user:~/environment/hello_app (master) $ git remote rm origin
ec2-user:~/environment/hello_app (master) $ git remote add origin [email protected]:ec2-user/hello_app.git
ec2-user:~/environment/hello_app (master) $ git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

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

◯試したこと
・一旦rmで消去して、もう一度同じ手順でプッシュしてみる
・ユーザー名が違うかと思い、確認したが合っている
git push -u origin --all とコマンド入力してみる

◯参考にしたURL
http://pyoonn.hatenablog.com/entry/2014/10/29/191744
https://qiita.com/katsukii/items/c3df0653ac07d41fe03f

以上です。よろしくお願いいたします

=======

なにかわからないことがあったときに、このような形で質問されると、答える側も回答しやすいですね。

闇雲に、

「なんかエラーがでました。。」

と言われても、原因を究明するのに時間がかかってしまいますし。

まずは現在がリモートリポジトリにどんなURLが登録されているかを確認

Permission denied (publickey). となる場合、大抵はSSH接続が正しくできていないことが多いですね。

とりあえずは、一旦以下のコマンドを入力して、まずは、現在のリモートリポジトリの状況を確認してましょう。

$ git remote -v

すると、以下のような表示がされると思います。

$ git remote -v
origin  [email protected]:ec2-user/hello_app.git (fetch)
origin  [email protected]:ec2-user/hello_app.git (push)

ここからわかることは、とりあえずリモートリポジトリにはちゃんとURLが登録されていて、存在しているということです。

エラーの原因は公開鍵と秘密鍵に不整合が起きているため

SSH接続は鍵という概念があって、公開鍵である id_rsa.pub を登録すると、pushする際に自分だけローカルに持っている秘密鍵と照合し、それぞれのユーザーを認識するような仕組みをとっています。

今回生徒さんからご質問いただいたエラーは、その公開用の鍵と秘密鍵の整合性があっていないのが原因ですね。

sshディレクトリ配下のファイルを確認してみる

エラーの原因がわかったところで、解消に向けてコマンドを叩いていきましょう。

まずはターミナルで次のコマンドを実行します。

$ ls ~/.ssh

実行結果を確認してみてください。もし、表示が

authorized_keys  known_hosts

とだけになっていたら、あなたはまだ公開鍵と秘密鍵を作成していないことになります。

ということで、次のコマンドを使って、それぞれの鍵を作成しましょう。

$ ssh-keygen -t rsa -C "[email protected]"

すると、いろいろと聞かれるので、必要事項を入力します。

ec2-user:~/environment $ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa): hoge
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
Your identification has been saved in hoge.
Your public key has been saved in hoge.pub.
The key fingerprint is:
SHA256:/Wm/wQl1So7ugK1dPmbLwg3Bjg+hbr/knnhW+2Q6f3E [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|         .    o .|
|        ..o  = o |
|       .S+..o o  |
|      . oo+o +..E|
|     .  o=o+O +o |
|      o+o+*@=... |
|     ..=B.oBB+o. |
+----[SHA256]-----+
項目 意味
Enter file in which to save the key 公開鍵のファイル名を入力。そのままEnterを押すと、id_rsa という名前になる。(すでにあった場合は、上書きしていいかと聞かれる)
Enter passphrase (empty for no passphrase) 秘密鍵用のパスワード。そのままEnterを押すと、パスワードなしになる。
Enter same passphrase again 確認用なので秘密鍵用のパスワードを再入力

無事に作成できたら、下記のコマンドを実行しましょう。

$ cat ~/.ssh/id_rsa.pub 

すると、次のような暗号化された文字列が返ってきます。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGIpyz/3d8VYW8lKsx46wQ4VmnnT318h867KemwKnfBknfRi9Xq9nFLexoLNJTdgFNlzUkls90UshG6C2QOZpEVgBCpeE9xhde3hnahFPoR8RltwrsyzX8CHrItK2ZmUOsrQjC/Sy4ZTEUZeLDK472FeuBElJ3ukPOG1hDeVaDS3bYJyKy1T+MSOX7tXfwcyQNDHzko+5luJWEVkciV1aoJ3vflAm3XKdrZ1q/eY+7wf8yThD6a1jWtqsPfP/2WZ3fbmBW7CX8XVzSDbO3DFmorZuwpXFGXOqd8nGFtZnbL3jOxuRsBosgkaTnD2/5ZjaPpZ7dO78XO1gziv2JXxGr [email protected]

これをコピーして、Bitbucketに登録します。

Bitbucketに公開鍵を登録

Bitbucketにログインしたあと、以下のGif画像の手順にしたがって、SSH鍵を登録するページまで遷移してください。

先程コピーした公開鍵を Key の部分にはりつけてましょう。

label はわかりやすい名前であればなんでもOKです。

pushしてみる

それでは、もう一度、pushしてみましょう!

$ git push -u origin master

エラーが発生せずにpushできたら完璧です!

お疲れ様でした!