GitHub、とても便利なソースコード管理のWebサービスですよね。自分がソース管理をする目的で使えるだけでなく、URLを誰かに伝えると、ブラウザだけでソースコードを見てもらえます。
どうせならよりセキュアに接続するために、SSH接続にチャレンジしてみましょう。
前提知識
ここで前提知識であるSSHや秘密鍵、公開鍵について解説しましょう。
SSHとは
SSHとはSecureShellの略で、超簡単にいうと「どこかのコンピューターと安全に通信するためのプロトコル」です。SSHでの通信は、認証のための情報や通信内容が暗号化されるので、安全な通信が可能というわけです。
また、認証にはすぐ後に解説する秘密鍵・公開鍵を使うので、パスワードの入力が必要なくなります。一応、GitHubのサイトのSSHについて解説している部分を引用しておきます。
SSHプロトコルを使うと、リモートサーバーや各種サービスへの接続や認証が可能になります。SSHキーを使うと、GitHubとの接続のたびにユーザー名やパスワードを入力する必要がなくなります。
一般的に、ユーザー名とパスワードを入力する認証方法はセキュリティ的に弱いとされています。パスワードによる認証を一切無効にして、後述する「鍵」による認証のみにするといったことがよく行われます。
公開鍵、秘密鍵とは
公開鍵と秘密鍵について、他のサイトで素晴らしい解説が多数あるので、ここでは簡単に解説してみます。
公開鍵と秘密鍵という2つの鍵を作ります。公開鍵は一般に公開するためのもの、秘密鍵は自分だけのものとします。公開鍵で鍵をかけたものは、秘密鍵でしか開けられません。逆もまたしかりで、秘密鍵で鍵をすると公開鍵でしか開けられません。
自分の手で2つの鍵を作ります。そして公開鍵は、あらかじめ通信する相手に預けます。つまりGitHubに登録するのです。
GitHub側とクライアントPC側、双方がこれらの鍵を使って認証や暗号化通信を行うというわけです。
GitHubにSSH接続できるようにする方法
では実際に作業してみましょう。手順はGitHubのサイトにある手順に基づいています。
鍵の作成
鍵はターミナルでコマンドを打って生成します。ただ、既存の鍵があるのにコマンドを実行すると上書きされてしまいます。よって、既存の状態を確認します。
cd ~/.ssh ls -al
実行中にフォルダがないといったエラーメッセージが表示されれば、今まで鍵を生成したことがありません。lsを実行してファイルが何も表示されなければ、鍵を生成したことがありません。次の手順へ進んでください。
もし仮にフォルダが存在していれば、lsコマンドの結果を見てid_rsa.pubとid_rsaというファイルが存在しているか確認してください。id_rsa.pubが公開鍵、id_rsaが秘密鍵です。この2ファイルがそろっていれば、「公開鍵をGitHubへ登録する」から実行してください。
ssh-keygenで鍵を生成する
ssh-keygenコマンドで鍵を生成します。「GitHubに登録したメールアドレス」はダブルクウォーテーションでくくって下さい。
ssh-keygen -t rsa -b 4096 -C "GitHubに登録したメールアドレス"
入力をうながすメッセージが表示されますが、すべて何も入力せずEnterしてください。
Generating public/private rsa key pair. Enter file in which to save the key (/Users/(PC名)/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again:
以下のように表示されます。
Your identification has been saved in /Users/(PC名)/.ssh/id_rsa. Your public key has been saved in /Users/(PC名)/.ssh/id_rsa.pub. The key fingerprint is: SHA256:(長い文字列) (指定したメールアドレス) The key's randomart image is: +---[RSA 4096]----+ (暗号みたいな文字列) +----[SHA256]-----+
これで鍵の生成は終了です。
公開鍵をGitHubへ登録する
公開鍵をGitHubへ登録しますが、要はコピペで文字列を貼り付けるだけです。
公開鍵、といっても中身はただのテキストです。普通にエディタでも開くことができます。しかしせっかくターミナルを開いているので、コマンド一発でコピーしましょう。
pbcopy < ~/.ssh/id_rsa.pub
次にGitHubを開き、SSH鍵の登録画面を開きます。右上のユーザーのアイコンをクリックし、プルダウンメニューの「SSH and PGP Keys」をクリックして、さらに「New SSH Keys」をクリックしてください。
Titleは適当です。KeyにCommand+Vでペーストしてください。
「Add SSH Key」をクリックして終了です。
SSHエージェントに鍵を登録する
この鍵を使う!とエージェントに伝える必要があります。
eval "$(ssh-agent -s)"
お使いのPCがMacOS Sierra 10.12.2かそれ以降なら、configというファイル名を新規に作り、以下を貼り付け、~/.sshフォルダに置く必要があります。
Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa
configファイルができたら、ファインダーのメニューバーの「移動」「フォルダへ移動」を選択し、「~/.ssh」と貼り付けて移動ボタンをクリックしてください。そこへ上記で作ったファイルを置きます。
続けましょう。以下を実行します。
ssh-add -K ~/.ssh/id_rsa
これで完了です。
接続できたかどうか確認する方法
ターミナルから、以下のコマンドを実行してください。
ssh -T git@github.com
すると、以下のいずれかのワーニングが表示されます。
The authenticity of host 'github.com (IP ADDRESS)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?
The authenticity of host 'github.com (IP ADDRESS)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)?
お使いのPCで実際に表示されたメッセージ中の「RSA key fingerprint is 〜」と、上記のいずれかが一緒なら問題ありません。yesとタイプしてEnterしてください。
Hi (入力したメールアドレス)! You've successfully authenticated, but GitHub does not provide shell access.
これで接続完了です!お疲れ様でした。
まとめ
本記事では、GitHubにSSHで接続する方法まで解説しました。
感触がつかめたら、パスフレーズを設定したり、実際にリポジトリをクローンしてみてくださいね!