テクノロジー
2017年11月11日SSHとソースコードのプッシュ
この記事では、SSHという通信の仕組みとGIthubでのソースコードのプッシュについて学習をしていきます。この仕組みを正確に理解しない状態で作業を進めてしまうと、エラーが多発してしまい、ムダな時間がかかってしまうので、じっくりと取り組みましょう。
目次
SSHとソースコードのプッシュについて
キーペアの作成
ソースコードをプッシュ
リモートリポジトリ
GitHubリポジトリにソースコードをプッシュ
Herokuリポジトリにソースコードをプッシュ
SSHとソースコードのプッシュについて
この記事では、SSHという通信の仕組みを学習します。この仕組みを正確に理解しない状態で作業を進めてしまうと、エラーが多発してしまい、ムダな時間がかかってしまうので、じっくりと取り組みましょう。
SSHとは、異なるコンピュータ同士の接続を安全に行うための仕組みです。
HTTPは テキストデータ
のやりとりに使われますが、SSHは コマンドでコンピュータに侵入
する時に使われます。
つまり目的が全然違います。
SSHには パスワード認証方式
と 公開鍵認証方式
の2種類があります。
ここでは後者を紹介します。
公開鍵認証方式は 公開鍵
と 秘密鍵
の キーペア
を使用します。
公開鍵は 鍵穴
秘密鍵は 家のマスターキー
だと思ってください。
では詳しい話に入る前に、もし皆さんが家のマスターキーを盗まれてしまったらどうなりますか?
空き巣に入られ放題ですよね…。
公開鍵認証方式は実はこれと全く同じなのです。
家のマスターキーに相当する秘密鍵が盗まれるとコンピュータに侵入されてしまうので、機密情報を盗んだりウイルスを仕込んだりを簡単にすることができます。
GitHubにソースコードを送るときもこの 公開鍵認証方式
という技術が用いられています。
なぜなら認証を行わなければ、誰でもそのリポジトリにアクセスできるようになってしまうからです。
キーペアの作成
まずは以下のコマンドを実行して、すでにキーペアがあるかどうかをチェックします。
- やってみましょう!
(コンソール
)
~/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
が 公開鍵
です。
pub
は public
の略なので、そちらが公開鍵と判断できます。
- やってみましょう!
(コンソール
)
~/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
で表示された公開鍵をコピペして貼り付けましょう。
こちらも ssh-rsa
から 最後
まで 全て
貼り付けてください。
ソースコードをプッシュ
リモートリポジトリ
リモートリポジトリとは ソースコードの送信先
のことです。
今回は GitHubリポジトリ
と Heroku
にソースコードを送信するので、リモートリポジトリは GitHub
と Heroku
となります。
GitHubリポジトリにソースコードをプッシュ
リポジトリ作成 にアクセスし、以下のように設定した後リポジトリを作成しましょう。
次に以下のコマンドでリモートリポジトリを登録します。
- やってみましょう!
(コンソール
)
~/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は、実際のリモートリポジトリを指します。
次に以下のコマンドでリモートリポジトリが登録されたことを確認しましょう。
- やってみましょう!
(コンソール
)
~/workspace/achieve $ git remote -v
origin <<<<<<https://github.com/(user_name)/achieve.git>>>>>> (fetch)
origin <<<<<<https://github.com/(user_name)/achieve.git>>>>>> (push)
このような表示が出れば大丈夫です。
最後にGitHubリポジトリへプッシュしましょう。
- やってみましょう!
(コンソール
)
~/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リポジトリにソースコードをプッシュ
まずは以下のコマンドを実行し、メールアドレスとパスワードを入力してください。
なおパスワードの入力値は 見えなくなっている
ので注意してください。
- やってみましょう!
(コンソール
)
~/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のリポジトリを作るために以下のコマンドを実行します。
- やってみましょう!
(コンソール
)
~/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
で確認ができます。
- やってみましょう!
(コンソール
)
~/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
- やってみましょう!
(コンソール
)
~/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にソースコードをプッシュしましょう。
- やってみましょう!
(コンソール
)
~/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/
にアクセスしてアプリを動作させてみましょう。
アプリが正常に起動できましたでしょうか。うまくいかない場合は、この記事の先頭からひとつひとつ確認しながら再度試してみてください。