GitでSSHに接続する方法
SSHとはなにか?
SSHとは簡単に説明すると、より安全性が向上したtelnetのことを言います。telnetは他のコンピュータを遠隔操作するための仕組みですが、パスワードなどの機密情報を暗号化せずにやりとりしてしまいます。そのためやりとりの過程で盗み見られてしまうと、その機密情報が第三者に知られてしまいます。そのような事態がおこらないために作られたのがSSHです。SSHは主にサーバなどとやり取りする際に使われますが、サーバと接続する際に情報を暗号化してしまうので万が一盗み見られたとしても、機密情報が漏洩するというリスクを減らすことが出来ます。
SSHの認証方法について
サーバへのログインが適正かどうかをチェックする方法は複数用意されていて、その中でも特に利用されているものが「パスワード認証方式」と「公開鍵暗号方式」です。
パスワード認証方式
ここでいうパスワードとはサーバーのユーザーアカウントに設定しているものです。方式としては手軽で扱いやすいですが、このパスワードが流出した場合に悪意のある第三者に不正アクセスを許してしまうという点で安全性がさほど高くないという危険性が伴います。
公開鍵暗号方式
一方公開鍵暗号方式では初期設定作業が少し大変ですが、通信の安全性は格段に向上します。方法はいくつかありますが「鍵」と呼ばれるファイルをしっかりと保管しておけば、その「鍵」を知らないユーザーはログインすることが出来ません。よって悪意のある第三者に情報を見られるという危険性が少なくなります。SSHサーバ上での主なやり取りは以下のようになります。
- ①「公開鍵」(第三者に知られても大丈夫)と「秘密鍵」(自分以外の人に知られないようしっかり保管する)をペアで生成する
- ②「公開鍵」ログインしたいサーバーに送る
- ③「公開鍵」で作られた暗号がサーバーから送られる
- ④自分が持っている「秘密鍵」で復号する(「公開鍵」と「秘密鍵」はペアで作ったのでそれ以外の秘密鍵では復号出来ない)
- ⑤復号した情報をサーバーに送り既存情報と一致すれば暗号化した通信を開始できます。
SSHの公開鍵と秘密鍵の生成方法
それではSSHの公開鍵と秘密鍵を生成してみましょう。ここではmacOSを想定しUNIX系のコマンドを利用します。このコマンドを実行してディレクトリを移動してください。
このcdコマンドでカレントディレクトリから「.ssh」という隠しディレクトリに移動します。ない場合は下記のコマンドで作りましょう。
次に「鍵」を生成します。下記のコマンドを入力してください。
このコマンドで「RSA」という方式の「暗号鍵」を生成します。実行すると名前、パスフレーズ、パスフレーズの再度入力などを行います。特にこだわりがなければすべてEnterキーを押して大丈夫です。lsコマンドで「~/.ssh」を確認すると下図のような画面が表示されます
id_rsa.pub
先ほど名前の変更を行わなった場合このようなファイルが出来ています。「id_rsa」が秘密鍵で「id_rsa.pub」公開鍵です。公開鍵の方をGitサーバーやGitHubに送るとSSH接続が出来るようになります。
公開鍵をGitHubに登録する方法
まずGitHubにアクセスし画面右上のアイコンをクリックしsettingsを選択してください。そうしたら画面左側に「SSH and GPG keys」というボタンがあるのでクリックしてください。
次の画面が表示されたら「New SSH key」をクリックしてください。
最後に「Title」に適当な名前と「Key」に先ほど作成した公開鍵の中身のコピーを張り付けてください。そして「Add SSH key」をクリックすると公開鍵の登録が完了します。
GitやGitHubにSSH接続を行うメリット
GitHubではリモートリポジトリと通信する時に、http,https,git,sshの4種類のプロトコルを利用することが出来ます。httpは暗号化されていないので使う意味はないですがhttpsは暗号化されるため、GtiHubの推奨プロトコルとなっております。性能もhttpsの方がSSHよりも高速で、クローンも高速に行うことができます。しかしSSHは仕組みが分かりやすく一般的なアクセスには特に問題がないので使い勝手がいいというメリットがあります。またGitHubを使わなくても、Gitを自社環境で用意する場合はSSH接続のほうが貼るかに楽に利用できるというメリットもあります。
まとめ
本記事ではSSHとはなんなのか、公開鍵と秘密鍵の生成方法、GitHubへの公開鍵の登録方法、そしてそのメリットについて説明しました。SSHはGitやGitHub以外のサーバーに対しても利用することができるので、この記事を参考にしながら色々と調べてみてください!