HTTPSとSSH
どっちを使うべき?
Githubを使っていると、リポジトリをcloneしたりpushする際に、HTTPSとSSHのどちらを使えば良いか?と言う点で悩むことがあると思います。

推奨はHTTPS
Githubとしては推奨はHTTPSとしています。
HTTPS通信で認証を行う場合は、認証はGitHubのユーザー名/パスワードによる認証となります。
また、SSH方式より高速です。
セキュリティ的にはSSH
しかし、JenkinsやAnsible、その他のミドルウェアからGithubにアクセスする際は、基本的にはSSH方式で接続を行っていると思います。
多少、通信速度は落ちますが公開鍵方式を用いるのでセキュリティがしっかりしています。
今回はMacでのSSHキーの作成からGithubへのSSH方式での接続確認までの手順を紹介致します。
手順
SSHキーの作成
まずはSSHキーを作成しましょう。
ターミナルから、以下のコマンドを実行してください。ssh-keygen -t rsa
するとターミナルに以下の入力を求められます。
| メッセージ | 内容 |
|---|---|
| Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): | 生成するファイルの名称を求められます。デフォルトのid_rsaで良ければ何も入力せずにエンターキーを押しましょう。 |
| Enter passphrase (empty for no passphrase): | パスフレーズの入力を求められます。特に設定不要なら何も入力せずにエンターキーを押しましょう。 |
| Enter same passphrase again: | パスフレーズの再入力を求められます。指定していなければ何も入力せずにエンターキーを押しましょう。 |
正常にSSHキーが生成されると以下のようなログが表示されます。
bash-4.2$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): xxx_rsa_id
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in xxx_rsa_id.
Your public key has been saved in xxx_rsa_id.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx {ユーザー名}@{サーバー}
The key's randomart image is:
+--[ RSA 2048]----+
| .=x=x.x. |
| x.+x .x. |
| x.xx x |
| .=.x. x x. |
| .x+ x |
| x x |
| |
| |
| |
+-----------------+そうすると、~/.ssh/ディレクトリの中に以下の2つのファイルが作成されていると思います。
| ファイル名 | 説明 |
|---|---|
| xxx_rsa_id | 秘密鍵。基本的にこのファイルはそのままノータッチ。 |
| xxx_rsa_id.pub | 公開鍵。こちらの情報を各種サーバーや外部サービスに登録することでSSH通信を可能にします。 |
公開鍵の内容をGithubに登録するので、catコマンドやvimコマンドでクリップボード等にコピーしておいてください。
Githubに公開鍵の登録
次にGithub側に上記で作成した公開鍵の情報を登録します。
まず、Githubにログインしたら、アカウントメニュー>Settingをクリックします。
左部のPersonal settingメニューからSSH and GPG keysをクリックします。
Titleに任意の名前をつけて、Keyに先ほどコピーした公開鍵の情報を入力したらAdd SSH keyボタンをクリックします。
これでGithubに公開鍵が登録されました。
configファイルの作成
次にconfigファイルを作成します。
configファイルとは、ssh経由でのリモートサーバーの接続する際に利用される設定ファイルです。
このファイルを用意すると、以下のコマンドを毎回打つ必要が無くなり、とてもすっきりします。ssh {ユーザー名}@{ホスト名} -i ~/.ssh/{秘密鍵}
今回は以下のソースを追加してください。
Host github github.com
HostName github.com
IdentityFile ~/.ssh/{使用する秘密鍵}
User git接続確認
では、ここでローカルマシンからGithubへの接続確認をしてみましょう。
以下のコマンドを実行してみてください。ssh -T github
以下のログがターミナルに表示されればSSH通信の設定が完了です♪
$ ssh -T git@github.com
The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?
Hi {リポジトリ名}! You've successfully authenticated, but GitHub does not provide shell access.
※前半のメッセージは初回接続時のみ表示されます
終わりに
以上のように、思っていた以上に簡単にSSHでの通信準備が整いました。
Githubへの通信はHTTPS通信でも可能ですが、認証キーを用いた接続方法を覚えておくことで他のサービスやシステムを使う際に役に立つので、ぜひSSH通信の設定方法を覚えてみてください。
