初心者がGitHubからヘテムルに手動pullするまでのお話

# 目指すゴール

1. ローカルで開発
1. GitHubにpush
1. リモート(ヘテムル)でpull



# 私の環境

| | 環境 |
|:---|:---|
| ローカルPC | MacBookAir OSX |
| レンタルサーバー | ヘテムル |
| Git管理ツール | SourceTree |
| 言語 | PHP |





# おおまかな流れ

1. **事前準備**
    1. 【ヘテムル】SSHログイン
1. **SSHキーの設定**
    1. 【ローカル】SSHキーを生成 
    1. 【ヘテムル】公開鍵を登録する
    1. 【GitHub】公開鍵を登録する
1. **手動でプル**
    1. 【GitHub】リポジトリ作成
    1. 【ヘテムル】手動でリポジトリをプル





# 事前準備



## 【ヘテムル】SSHログイン

ヘテムルは最初からGitを使える状態にしてくれているみたいです。



**▼ ヘテムル公式で設定方法をまとめてくれています。**
:point_right_tone2: [ヘテムル > マニュアル > Git利用法](https://heteml.jp/support/manual/git/)

でも初心者なわたくしは、一行目の
> お好みのSSHソフトでご自身のサーバーにSSH接続します。

からひっかかりました＼(^o^)／ﾅﾝﾀﾞｿﾚ



**▼ リンク先のマニュアルを見ると、ターミナルとかの黒い画面を「SSHソフト」って言うみたいです。**
:point_right_tone2: [ヘテムル > マニュアル > SSHソフトの設定とコマンド](https://heteml.jp/support/manual/sshsetting/)
そうだったのか。。。



**▼ リンク先のこちらを参考に、SSHの設定をしました。**
:point_right_tone2: [ヘテムル > マニュアル > SSHのご利用方法](https://heteml.jp/support/manual/ssh/)



**▼ 引き続きこちらを参考に、SHH接続をしました。**
:point_right_tone2: [マニュアル > SSH ソフトの設定とコマンド > ターミナルの設定方法](https://heteml.jp/support/manual/ssh/terminal/)

```:ローカル
$ ssh -p 2222 【SSHアカウント名】@【ホスト名】 //【FTPアカウントのユーザー名】@【SSHアカウントのサーバー】ってことね！
# なんかyes/no聞かれたら'yes'とEnter
```



**▼ SSHパスワードを聞かれるので、下記ページで確認して貼り付けます。**
:point_right_tone2: [トップページ > SSH アカウント](https://admin.heteml.jp/web/ssh/)

※何回か使うことになるので、一時的にどこかに貼り付けておくといいかも。





# SSHキーの設定



**▼ 公開鍵とは**

公開鍵？秘密鍵？SSHキー？SSHアカウントのサーバーとかパスワードとは違うの？？？
慣れない言葉が飛び交っていまいち分かりにくかったのですが、さくらさんの説明が分かりやすかったです！以下抜粋。

> 公開鍵認証方式でログインするには鍵が2つ必要です。
> パソコン側に置く秘密鍵ファイルと、サーバー側に置く公開鍵ファイルです。
>
> 秘密鍵ファイルは人に知られてはいけません。
> 公開鍵ファイルは、人に知られても良い(公開できる)ファイルです。
> この2つのファイルが揃って初めて公開鍵認証によるログインが可能になります。
>
> 公開鍵認証では、sshのログイン時に使ったパスワードの代わりに「パスフレーズ」を使用します。
> サーバーへログインするパスワードと似たようなもので、自分が決めた文字列を設定できますが、これはサーバーへログインするためのものではなく、秘密鍵にアクセスするための秘密の文字列です。
>
> :point_right_tone2: [さくらのナレッジ > 「よく分かる公開鍵認証」～初心者でもよくわかる！VPSによるWebサーバー運用講座(2)](http://knowledge.sakura.ad.jp/beginner/3543/)





## 【ローカル】SSHキーを生成



**▼ すでにSSHキーが設定されていないか、念のため確認する。**
:point_right_tone2: [GitHub Help > 既存のSSH鍵の確認](https://help.github.com/articles/checking-for-existing-ssh-keys/)

```:ローカル
$ ls -al ~/.ssh
``` 

下記のいずれかが存在しなければ、新しいSSH鍵を生成します。
・ `id_dsa.pub`
・ `id_ecdsa.pub`
・ `id_ed25519.pub`
・ `id_rsa.pub`




**▼ 新しいSSH鍵を生成する。**
:point_right_tone2: [GitHub Help > 新しいSSH鍵を生成してssh-agentに追加する](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)

```:ローカル
$ ssh-keygen -t rsa //オプションつけてる記事もあるけど、なくていいらしい
# 鍵の保存先を聞かれるので、デフォルトのままEnterする
# パスフレーズを聞かれるので、空のまま2回Enterする
```



**▼ SSH鍵をssh-agentに追加する**

```:ローカル
$ ssh-add -K ~/.ssh/id_rsa //Mac限定のコマンドらしい
```





## 【ヘテムル】公開鍵を登録する


**▼ サーバーへの公開鍵登録方法**
:point_right_tone2: [Qiita > ssh公開鍵認証設定まとめ](http://qiita.com/ir-yk/items/af8550fea92b5c5f7fca)

参考記事によると、登録方法は2種類あるらしい。
・ ssh-copy-id を使用して登録
・ 手動で登録

前者の方法でやってみようと思ったけど、Homebrewのコマンド使えなかった(ﾉД`)ｼｸｼｸ
手動で登録してみます。



**▼ ヘテムルに必要なフォルダとファイルを設置**

```:ローカル
# ヘテムルにSSHログイン
$ ssh -p 2222 【SSHアカウント名】@【ホスト名】 //パスワード聞かれたら入力
```

```:リモート
# フォルダとファイルを作成
$ mkdir .ssh
$ touch .ssh/authorized_keys

# 権限の設定。個々を間違えると、公開鍵認証でログイン出来ないので注意
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys

# いったんログアウト
$ logout
```



**▼ ローカルの公開鍵をヘテムルのauthorized_keysへ追記**

```:ローカル
# ローカルの公開鍵をヘテムルのauthorized_keysへ追記
$ cat ~/.ssh/id_rsa.pub | ssh -p 2222 【SSHアカウント名】@【ホスト名】 'cat >> .ssh/authorized_keys'
# パスワード聞かれたら入力
```



**▼ 公開鍵認証で接続できるか確認**

```:ローカル
# ヘテムルにSSHログイン
$ ssh -p 2222 【SSHアカウント名】@【ホスト名】
```

いつもみたいにパスワードを聞かれずすんなりログインできたら、成功です！やったね☆
参考記事だとつづけて「パスワード認証を禁止する」のだけど、

> 鍵登録が正常にできていなかった場合、サーバーへVNCできるか物理アクセスできないと 詰みます

ってのがなんか怖いし、禁止しなくても問題ないのでスルーします(ビビリ)



**▼ ssh configの設定（飛ばしてもOK）**

SSHログインのたびにパスワードを入力する面倒臭さからは開放されました。
でも毎回 `$ ssh -p 2222 【SSHアカウント名】@【ホスト名】` って打つのも面倒ですよね。
`$ ssh heteml` みたいに、自分で設定したキーワードで簡単にログインできるようになるらしいです！

SSHログアウト後、ローカルで実施。

```:ローカル
$ vi ~/.ssh/config   # viが立ち上がる

i                    # INSERTモードに変更

Host heteml
  HostName 【ホスト名】
  User 【SSHアカウント名】
  Port 2222

ESC                  # コマンドモードに戻る
ZZ                   # 上書き保存し、viを終了
```

無事、`$ ssh heteml`でログインできるようになりました☆

ちなみにviコマンドはこちらの参考ページにお世話になってます。
:point_right_tone2: [Qiita > よく使うVimのコマンドまとめ](http://qiita.com/hide/items/5bfe5b322872c61a6896)
※viで編集するのが嫌だったら、普通にエディターで編集してもOKですよ！




## 【GitHub】公開鍵を登録する

:point_right_tone2: [Qiita > gitHubでssh接続する手順~公開鍵・秘密鍵の生成から~](http://qiita.com/shizuma/items/2b2f873a0034839e47ce)



**▼ 鍵の中身をクリップボードにコピー。**

ローカルで実施。

```:ローカル
$ pbcopy < ~/.ssh/id_rsa.pub
```



**▼ GitHubのSettingsメニューから登録。**
![Add SSH Key](https://qiita-image-store.s3.amazonaws.com/0/186046/0833f285-0816-930b-4b7b-79a27ab97cd5.png)

Titleは分かりやすければ何でもいいらしい。
Keyは先ほどクリップボードにコピーしたものを貼り付けるだけ！



**▼ 無事登録できました！**
![SSH Keys](https://qiita-image-store.s3.amazonaws.com/0/186046/cf96502a-b729-485c-ca4a-664bff8d3d85.png)




**▼ 接続を確認する。**

```　:ローカル
$ ssh -T git@github.com
# なんかyes/no聞かれたら'yes'とEnter
```
↓こんなふうに返ってきたら成功です☆

```
Hi 【ユーザー名】! You've successfully authenticated, but GitHub does not provide shell access.
```





# 手動でプル

まずはプルしてくるためにリポジトリを用意します。



## 【GitHub】リポジトリ作成



**▼ GitHubにログインして、右上の「＋」から「New repository」を選択。**
![New repository](https://qiita-image-store.s3.amazonaws.com/0/186046/f3ad721b-f89d-bdc7-5051-e76181506906.png)



**▼ リポジトリ名入力/README作成/.gitignore追加にチェックを入れて、リポジトリ作成。**
![Create a new repository](https://qiita-image-store.s3.amazonaws.com/0/186046/62cd79e0-6d70-1e20-f72a-1f658c25bf37.png)

今回は制作予定サイトのドメインと同じリポジトリ名で作成しました。
READMEはなくてもいいんだけど、とりあえずのファイルを作るのが面倒なので生成してもらいました。
.gitignoreはとりあえずCodeIgnitorを選択したけど、使う言語・フレームワークに合わせてください。





## 【ヘテムル】手動でリポジトリをプル



会社で自動デプロイを利用していますが、時々トラブルや緊急対応で手動プルしてる時があります。
自動デプロイの設定をする前に、まず手動でGitHubから手動プルできるかやってみます。



**▼ やっとGit利用法のマニュアルに戻ってこれました。**
:point_right_tone2: [ヘテムル > マニュアル > Git利用法](https://heteml.jp/support/manual/git/)



**▼ ユーザーの初期設定をする。**

```:リモート
$ git config --global user.email "【GitHubのメールアドレス】"
$ git config --global user.name "【GitHubのユーザー名】"
$ git config --global color.ui auto
$ git config --global --list    # ユーザーの初期設定が ~/.gitconfig に保存されるので、設定を確認
```



**▼ ディレクトリ移動。**
GitHubで管理したいディレクトリに合わせてください。

```:リモート
$ cd ~/web/xxxxx
```



**▼ リポジトリを作成する。**

```:リモート
$ git init    # リポジトリを作成
$ git remote add origin git@github.com:【ユーザー名】/【リポジトリ名】.git    # GitHubのリポジトリと紐付け
```

このあと
`$ git clone git@github.com:【ユーザー名】/【リポジトリ名】.git` か、
`$ git pull origin master` でGitHubからリポジトリを引っ張ってこれると思ったのですが、なかなかうまく行かない。。。

~~どうやら秘密鍵もリモートに置いておく必要があるみたいです。~~
~~「えっ！？秘密なのにリモートに置いていいの？」ってハラハラする初心者な私。~~

あ、やっぱりリモートに秘密鍵置いちゃダメですよね！(ほっ)
※ と思ったけど、後でやっぱりリモートに秘密鍵を置くことになりました。。。記事の最後参照。


**▼ .ssh/configに設定を追加する。**

:point_right_tone2: [Qiita > ssh-agentを利用して、安全にSSH認証を行う](http://qiita.com/naoki_mochizuki/items/93ee2643a4c6ab0a20f5)

```:ローカル
$ vi ~/.ssh/config              # viが立ち上がる
i                               # INSERTモードに変更

Host heteml
  HostName 【ホスト名】
  User 【SSHアカウント名】
  Port 2222
  ForwardAgent yes              # この一行を追加
  IdentityFile ~/.ssh/id_rsa    # ついでにこれと
  IdentitiesOnly yes            # これも追加

ESC                             # コマンドモードに戻る
ZZ                              # 上書き保存し、viを終了
```

`ForwardAgent yes` とすることで、秘密鍵をローカルに置いたままリモートでも使い回しできるらしいです。
SSHログインする時に使った秘密鍵を、ログイン中GitHub用にも使わせてねって感じかな。

`IdentityFile ~/.ssh/id_rsa`と`IdentitiesOnly yes`は、SSHログインしようとすると
`Too many authentication failures for ユーザー名`というエラーが出てくるようになってしまって、
こちらの記事をマネして追加しました。
:point_right_tone2: [AWSにSSHログインでToo many authentication failuresエラー](https://blogs.da-cha.jp/index.php/momokuri/aws-ssh-too-many-authentication)



**▼ リポジトリをプルする。**

再度 `$ ssh heteml` でログインし直してください。

```:リモート
$ cd ~/web/xxxxx
$ git pull origin master
# なんかyes/no聞かれたら'yes'とEnter
```

無事にできました☆





# 自動デプロイ環境づくり

この記事を書き始めた当初の目的は自動デプロイ環境作りだったのですが、どうしてもうまくいかなくて。
リモートに秘密鍵を置くようにしたらうまくいきました！(それでいいのかは分かりませんが…)
別々の方法が1つの記事になっていると分かりにくかったので、2本に分けました。
もしよければ自動デプロイ環境づくり版の記事も、ご覧ください。

:point_right_tone2: Qiita > 初心者がGitHubからヘテムルに手動pullするまでのお話 ←**今ココ**
:point_right_tone2: [Qiita > 初心者がGitHubからヘテムルに自動デプロイする環境を構築するまでのお話](http://qiita.com/HitomiHoshisaki/items/51df1c1eaac39d864a04)