LoginSignup
5
2

More than 3 years have passed since last update.

Cloud9からGitHubのレポジトリへSSHでpushする手順(エラー解決方法含む)

Last updated at Posted at 2020-02-22
  • Git BashなどでGitを動かしたことがある。
  • GitHubのレポジトリは作成済。

という方で、

  • 「初めてAWS Cloud9上で開発を始めたため、作成したソースを、既にあるGitHubのレポジトリへアップしたい」

という方向けに作成しました。

私自身はgit bashでGit/GitHubを操作したことはありましたが、初めてCloud9でgitを扱う際、色々とエラーが出て困ったので、Cloud9用の記事が欲しかったなと思って作成しました。

なお、GitHubのレポジトリは「公開」にしている前提です。
(非公開だとまた手順が異なるよう)

※Git/GitHub初学者の方は以下の動画がおすすめです。
https://www.udemy.com/share/101vBkAEMYcFxTTHgE/

はじめに

まずはcloud9のターミナルを用意。
念のため、gitが入っているか確認します。(Cloud9だと当然入っていますが)

$ git --version
git version 2.14.5

ローカルレポジトリ作成

ローカルレポジトリを作成したい任意のディレクトリに移動し

$ git init

を実行すると、「.git」ディレクトリ(ローカルレポジトリ)が生成されます。

ステージングエリアにadd

まずは、ステージングエリアにadd

$ git add [file]

※git addのオプションについては以下がわかりやすかったので参照下さい。
https://note.nkmk.me/git-add-u-a-period/

ローカルレポジトリにcommit

そして、ステージングエリアにあるファイルをローカルレポジトリにcommit

$ git commit -m "[任意のメッセージ]"

リモートレポジトリの登録とgit push

commitできたら、cloud9上で作成したgitのローカルレポジトリには登録完了です。
次に、GitHubのレポジトリ(リモートレポジトリ)にpush(アップロード)する必要があります。
まずはリモートレポジトリの登録から

$ git remote add origin git@github.com:[自身のGitHubのレポジトリ].git

その後、

$ 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. 

上記のエラーは、それぞれの行ごとに、以下のような意味です。

パブリックキーで権限が拒否された。
リモートリポジトリが読み取れない。
アクセス権持っている?それともリポジトリ自体存在している?

エラーを解決していきましょう。

先ほど、リモートレポジトリの登録は完了したかと思います。
そのため、先ほどのエラーメッセージの「リモートレポジトリ自体存在している?」は問題ないということになり、
「アクセス権持っている?」が問題になります。

では、アクセス権を得ましょう。

GitHubへアクセスには、公開鍵が必要です。
開発環境で公開鍵を作成し、GitHubへ公開鍵を登録することでアクセスできるようになります。

公開鍵の作成

まずは、cloud9内のディレクトリに、公開鍵を作成します。

$ ssh-keygen -t rsa -C "[リモートレポジトリを登録した自分のメールアドレス(・・・@gmail.comなど)]"

(-Cより後のコメント部分はなくても実行可能ですが、GitHubに登録しているEmailアドレスを指定するのが一般的のようです)

「ssh-keygen」はSSH(Secure SHell)の公開鍵と秘密鍵を作成するコマンドです。
ちなみにオプションの意味は

  • 「-t rsa」・・・作成する鍵の暗号化形式を「rsa」で指定
  • 「-C "コメント"」・・・コメントを指定

もっと詳しく知りたい方は以下記事がよいと思います。
https://www.atmarkit.co.jp/ait/articles/1908/02/news015.html

実行すると、以下のメッセージが出てきます。Enter~から始まる行が3回あり、各行にて入力を求められますが、すべて何も入力せずEnterを押して問題ありません。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:

上記でEnterを3回押すと、以下のメッセージが表示され、公開鍵が作成されます。(randomart imageの箇所は適当に書き換えています)

Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:・・・・・・・・・・・・・・・・・・・・・・・・・・  ……………@gmail.com
The key's randomart image is:
+---[RSA 2048]----+
|....................       |
| ..........        |
|   ......= ......       |
|    *..... .....        |
|   ...... BS+       |
|    =...........o..      |
ho
host github
|   .................       |
|    ......o*=.....+       |
|    .E..........*......      |
+----[SHA256]-----+

その後、.sshディレクトリを確認すると、公開鍵が作成されているのがわかります。

$ ls ~/.ssh/
authorized_keys  id_rsa  id_rsa.pub  known_hosts

id_rsa.pubファイルの内容をコピー

下記コマンドでid_rsa.pubのファイル内容を表示し、中身をコピーします。
(lessコマンドで中身を見るのではなく、ファイルの中身をすべてコピーしてもOK)

$ less ~/.ssh/id_rsa.pub

ファイル内の以下のssh-rsaから始まる部分をコピーします。(メールアドレスまでコピーに含めても含めなくても特に変わりないのでどちらでも構いません)

ssh-rsa ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・ [メールアドレス]

公開鍵をGitHubに登録

今コピーした部分を、GitHubに登録するのですが、まずGitHubにブラウザからアクセスし、右上の自分のプロフィール画像から「settings」をクリック

image2.png

そして、左側のメニューから「SSH and GPG keys」を選択し、「New SSH key」をクリックします。

image3.png

すると、登録画面が出てきます。
登録画面の「key」部分のテキストエリアに先ほどコピーした「ssh-rsa」から始まる文言を貼り付けます。
ちなみに、タイトルは何でも構いません。

image4.png

貼り付けができたら「Add SSH key」をクリック。

ここで、下記コマンドを打てば接続に成功できると書いている記事が多いですが、エラーが出て接続に失敗する場合もあります。

$ ssh -T git@github.com

configファイルの作成

接続に失敗する場合は、.sshのディレクトリ内に「config」というファイルを作成します。
vimで、ファイルの作成と中身の記述を行います。

$ vim ~/.ssh/config

configファイルの中身に、下記の文言を貼り付けます。
なお、IdentityFileの後のパスは、自身の「id_rsa」ファイルを格納しているパスに変えてください。

Host github github.com
  HostName github.com  IdentityFile ~/.ssh/id_rsa
  User git

新規作成ファイルの権限設定

作成できたら、権限設定をします。
新規でファイルを作成したので、適切な権限を設定し、適切に実行できるようにします。

作成した当初は、configファイルに何も権限がない状態。

しかし今回は、「所有者読み取り権限があり、その他のユーザには権限がない」という状態にする必要があります。

そのため、権限は600か400にします。
(書き込み権限はあってもなくてもよいため)

所有者以外には権限を与えてはいけません。
600にするならば、以下を実行します。

$ chmod 600 ~/.ssh/config

ssh実行

そして、下記を実行。

$ ssh -T git@github.com

実行し、下記のような文字列が出力されたらOK!

Hi [username]! You've successfully authenticated, but GitHub does not provide shell access.

これで、git pushが可能になります。

最後に、git pushを行う

git pushで、ローカルレポジトリのファイル類をリモートレポジトリにアップロードできます。

$ git push origin master

これで完了です!

5
2
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
5
2