テクノロジー

2017年11月11日
  • #tips
  • #Github

SSHとソースコードのプッシュ

Aws4 request&x amz signedheaders=host&x amz signature=4530f12351bb98192dd621a4d59d9a3c446c26b3d1698e5d95aa3ad89d9bd900

SSHとソースコードのプッシュについて

この記事では、SSHという通信の仕組みを学習します。この仕組みを正確に理解しない状態で作業を進めてしまうと、エラーが多発してしまい、ムダな時間がかかってしまうので、じっくりと取り組みましょう。

SSHとは、異なるコンピュータ同士の接続を安全に行うための仕組みです。
HTTPは テキストデータ のやりとりに使われますが、SSHは コマンドでコンピュータに侵入 する時に使われます。
つまり目的が全然違います。

SSHには パスワード認証方式公開鍵認証方式 の2種類があります。
ここでは後者を紹介します。

公開鍵認証方式は 公開鍵秘密鍵キーペア を使用します。
公開鍵は 鍵穴 秘密鍵は 家のマスターキー だと思ってください。

https://diveintocode.gyazo.com/37068cc27ab5dd2f66a555a1790a4e77

では詳しい話に入る前に、もし皆さんが家のマスターキーを盗まれてしまったらどうなりますか?
空き巣に入られ放題ですよね…。

https://diveintocode.gyazo.com/930b124dc912eb349557b7a909c085a7

公開鍵認証方式は実はこれと全く同じなのです。
家のマスターキーに相当する秘密鍵が盗まれるとコンピュータに侵入されてしまうので、機密情報を盗んだりウイルスを仕込んだりを簡単にすることができます。

https://diveintocode.gyazo.com/163c4180a3fb2ac388b9eea1ecf5a053

GitHubにソースコードを送るときもこの 公開鍵認証方式 という技術が用いられています。
なぜなら認証を行わなければ、誰でもそのリポジトリにアクセスできるようになってしまうからです。

キーペアの作成

まずは以下のコマンドを実行して、すでにキーペアがあるかどうかをチェックします。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ ls -la ~/.ssh/

total 32
drwxr-xr-x  2 ubuntu ubuntu 4096 Jan 23 09:01 ./
drwxr-xr-x 22 ubuntu ubuntu 4096 Jan 11 07:22 ../
-rw-r--r--  1 ubuntu ubuntu  409 Jan 23 09:09 authorized_keys
-rw-r--r--  1 ubuntu ubuntu  330 Nov  1 05:45 config
-rw-------  1 ubuntu ubuntu 3243 Jan 23 09:01 id_rsa
-rw-r--r--  1 ubuntu ubuntu  746 Jan 23 09:01 id_rsa.pub
-rw-r--r--  1 ubuntu ubuntu 6537 Nov  1 05:45 known_hosts

id_rsa秘密鍵id_rsa.pub公開鍵 です。
pubpublic の略なので、そちらが公開鍵と判断できます。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDB/ViLHlA03Z3yDs7b579cjDVeB4Ufa9z1QEy9SLQs1l9S1OVXmzkhWm255WE6+7cJwxxXwBzPs2wax4ek7kKqw2xB7mFjjbedq4iCT6oC7WocOaXGAVYruVKD8KA6MNEGKXBnYnd8EnCmD8LNCBxycRAfD2dbZuOYekntXgUhRpxoo6Tm9mEbJpuEeHK0i4+35UleVYtHEMMaxbtoEUE8QXL1bQMASOsqFeC6UJkj8930u2obUXLQbEl9+uvjnxGfOpxfyZgXY5ifI5ERWCJdqm+hzIPZEOSrgxAs1gomdBlk5hckLGfCcuoQjxuybmDBq0meo0EbIvpkxhG0J8G3

以上のように公開鍵が現れるので、これをコピーしましょう。
コピーする範囲は ssh-rsa から 最後まで です。
次にGitHubの SSH Keys にアクセスして、先ほど cat ~/.ssh/id_rsa.pub で表示された公開鍵をコピペして貼り付けましょう。

https://diveintocode.gyazo.com/c31b64dc0677ca236835a084300d9138

こちらも ssh-rsa から 最後 まで 全て 貼り付けてください。

ソースコードをプッシュ

リモートリポジトリ

リモートリポジトリとは ソースコードの送信先 のことです。
今回は GitHubリポジトリHeroku にソースコードを送信するので、リモートリポジトリは GitHubHeroku となります。

https://diveintocode.gyazo.com/1fcd398da8fe77162d362ab0757c0218

GitHubリポジトリにソースコードをプッシュ

リポジトリ作成 にアクセスし、以下のように設定した後リポジトリを作成しましょう。

https://diveintocode.gyazo.com/d145f65ad807f6bcd3f8a8d613dc5621

次に以下のコマンドでリモートリポジトリを登録します。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ git remote add origin <<<<<<<https://github.com/(user_name)/achieve.git>>>>>>>

git remote add というコマンドで、リモートリポジトリを登録できます。
origin とはリモートリポジトリの名前のことで、GitHubのリモートリポジトリはorigin であることが多いです。
<<<<<<<https://github.com/(user_name)/achieve.git>>>>>>> というURLは、実際のリモートリポジトリを指します。

次に以下のコマンドでリモートリポジトリが登録されたことを確認しましょう。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ git remote -v

origin	<<<<<<<https://github.com/(user_name)/achieve.git>>>>>>> (fetch)
origin	<<<<<<<https://github.com/(user_name)/achieve.git>>>>>>> (push)

このような表示が出れば大丈夫です。
最後にGitHubリポジトリへプッシュしましょう。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ git push origin master

Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 491 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To <<<<<<<https://github.com/(user_name)/achieve.git>>>>>>>
   d71f12a..bad6f57  master -> master

このような表示が出れば大丈夫です。

Herokuリポジトリにソースコードをプッシュ

まずは以下のコマンドを実行し、メールアドレスとパスワードを入力してください。
なおパスワードの入力値は 見えなくなっている ので注意してください。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ heroku login

Enter your Heroku credentials.
Email: hogehoeg@example.com
Password (typing will be hidden):
Logged in as hogehoeg@example.com

このように Logged in as (email) と表示されれば大丈夫です。
次にHerokuのリポジトリを作るために以下のコマンドを実行します。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ heroku create

Creating app... done, ⬢ (app_name)
https://(app_name).herokuapp.com/ | <https://git.heroku.com/(app_name).git>

これをすると git remote add を自動でやってくれます。
さらに、Herokuの設定は heroku config で確認ができます。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ heroku config

=== xxxx-yyyy-zzzz Config Vars
DATABASE_URL:               postgres://hogehogehogehogehogehogehogehoge.hogehoge-1.amazonaws.com:5432/hogehoge
LANG:                       en_US.UTF-8
RACK_ENV:                   production
RAILS_ENV:                  production
RAILS_SERVE_STATIC_FILES:   enabled
SECRET_KEY_BASE:            hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge
SENDGRID_PASSWORD:          hogehoge
SENDGRID_USERNAME:          hogehoge@hogehoge.com
  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ git remote -v

heroku	<<<https://git.heroku.com/(app_domain).git>>> (fetch)
heroku	<<<https://git.heroku.com/(app_domain).git>>> (push)
origin	<<<<<<<https://github.com/(user_name)/achieve.git>>>>>>> (fetch)
origin	<<<<<<<https://github.com/(user_name)/achieve.git>>>>>>> (push)

このように表示されていれば大丈夫です。
最後にHerokuにソースコードをプッシュしましょう。

  • [x] やってみましょう!

(コンソール)

~/workspace/achieve $ git push heroku master

Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 491 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.2.4
remote: -----> Installing dependencies using bundler 1.13.7
remote:        Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote:        Fetching gem metadata from <https://rubygems.org/...........>
remote:        Fetching version metadata from https://rubygems.org/..
.
.
.
.
(省略)
.
.
.
.
remote: -----> Compressing...
remote:        Done: 50.7M
remote: -----> Launching...
remote:        Released v72
remote:        https://(app_domain).herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To <<<https://git.heroku.com/(app_domain).git>>>
   d71f12a..bad6f57  master -> master

このように表示されていれば、Herokuへのプッシュが完了していることになります。
https://(app_domain).herokuapp.com/ にアクセスしてアプリを動作させてみましょう。

アプリが正常に起動できましたでしょうか。うまくいかない場合は、この記事の先頭からひとつひとつ確認しながら再度試してみてください。

DIVE INTO CODEのことをもっと知ってみませんか?