Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

先日、生徒さんから

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

と質問されました。

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

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

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

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

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

◯エラーログ

ec2-user:~/environment (master) $ cd hello_app
ec2-user:~/environment/hello_app (master) $ git remote add origin git@bitbucket.org: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 git@bitbucket.org: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  git@bitbucket.org:ec2-user/hello_app.git (fetch)
origin  git@bitbucket.org:ec2-user/hello_app.git (push)

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

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

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

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

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

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

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

$ ls ~/.ssh

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

authorized_keys  known_hosts

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

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

$ ssh-keygen -t rsa -C "hoge@example.com"

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

ec2-user:~/environment $ ssh-keygen -t rsa -C "hoge@example.com"
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 hoge@example.com
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 hoge@example.com

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

Bitbucketに公開鍵を登録

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

bitbucket-ssh.gif

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

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

pushしてみる

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

$ git push -u origin master

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

お疲れ様でした!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away