免責事項
この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。
環境
OS:最新版ではないMacOS
VirtualBox:5.2.26
Vagrant:2.2.6
Ubuntu:ubuntu/bionic64 v20181129.0.0
目次
- 公開鍵認証の解説
- Githubへ公開鍵を登録
1. 公開鍵認証の解説
公開鍵認証とは
公開鍵認証とは、サーバーへのログイン時に認証を行う仕組みであり、ユーザー名とパスワードを使用した認証と比べ、よりセキュリティや柔軟性が高いのが特徴です。 いっぽうで、若干設定が難しいという欠点もあります。 パスワードを使った認証では、ユーザー名とパスワードという2つの情報だけで認証を行います。
このとき、パスワードは暗号化されずに直接サーバーに送信されるため、たとえばサーバーがハッキングされていたり、別のサーバーによって成りすまされていたりといった場合、パスワードは簡単に盗まれてしまいます。
公開鍵認証を利用することで、このような問題を解決することができます。
公開鍵認証の仕組み
公開鍵認証では、「公開鍵(public key)」と「秘密鍵(private key)」という、2種類の鍵情報を利用して認証を行います。
「秘密鍵」は、その名の通りクライアント側のPCや端末等に格納され、秘密(非公開)にしておく認証情報です。
「公開鍵」は認証を行うサーバー側にあらかじめ何らかの方法で渡しておく認証情報です。
また、公開鍵を利用することでデータを暗号化することができます。
秘密鍵(とパスフレーズ)を利用することで、公開鍵で暗号化したデータを複合することができます。
(引用:https://ja.osdn.net/projects/winscp/wiki/public_key)
これらの仕組みを使うことで、秘密鍵とパスフレーズの2重の認証が必要なので安心です。
2. Githubへ公開鍵を登録
今回は、クライアント側でLinux(Ubuntu)のSSHを利用し、公開鍵と秘密鍵を作り、公開鍵をGitHubサーバーに登録します。
①公開鍵と秘密鍵を作る。
コンソールで以下のように入力してください。
$ ssh-keygen
すると、コンソールに以下のように表示されます。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ユーザー名/.ssh/id_rsa):
作成するファイル名がid_rsaで良いかを尋ねられていますが、そのままでよいのでEnterキーを押します。
(~/.sshディレクトリがない場合、ディレクトリが作成されます。)
続いて、以下のように表示されます。
Enter passphrase (empty for no passphrase):
この鍵を利用するためのパスフレーズを入力します。公開鍵を使うたびに毎回聞かれるので、忘れないようにしておきましょう。
Enter same passphrase again:
再度確認のパスフレーズを入力すると、以下のように表示されます。
The key fingerprint is:
The key's randomart image is:
これは指紋(finger print)で、SSHクライアントからSSHサーバーへ最初に接続するとき、SSHサーバーを識別するのに利用されます。
例えば、アリスがボブの公開鍵を検証したい場合、彼女は電話や直接会うなどの方法でボブと連絡をして、ボブの公開鍵の指紋を読み上げてもらうか、指紋が書かれた紙を渡してもらう。アリスはこの信頼できる指紋が入手した公開鍵の指紋と一致するかを確認することができる。
(ウィキペディアより)
さて、これで公開鍵と暗号鍵が完成しました。
鍵は ~/.ssh の中に保存されていますので、下記のコマンドで確認してみましょう。
$ ls ~/.ssh
すると、以下のように表示されます。
authorized_keys id_rsa id_rsa.pub
id_rsaが秘密鍵、id_rsa.pubが公開鍵を意味します。
2. 公開鍵をGitHubに登録
続いて、GitHubサーバーに公開鍵を登録していきます。
以下のコマンドで公開鍵を表示します。
$ cat ~/.ssh/id_rsa.pub
すると、
ssh-rsa AJNFUF2373IFIJOFKP82jsIjoffh.......
のような公開鍵情報が表示されます。
Settingsページの左側のSSH and GPG keysという箇所をクリックします。

右上のNEW SSH keyという緑色のボタンをクリックし、
好きなTitleを入力します。Titleはクライアントユーザーの名前などが良いでしょう。
次にKeyに先ほど作った公開鍵を入力します。

入力したら、Add SSH keyボタンをクリックします。
これで、GitHubサーバーとクライアント(あなたのPC)がSSHを利用した暗号化通信をできるようになりました。
gitでpushやpullをする際に、先ほど秘密鍵を生成した際に入力したパスフレーズが毎回聞かれるので忘れないようにしておいてください!
参考
「N予備校 プログラミングコース」
https://www.nnn.ed.nico/
「ssh-keygen - 認証用の鍵を生成 - Linuxコマンド」
https://webkaru.net/linux/ssh-keygen-command/
「【Linux】SSH 公開鍵認証の設定手順【図解】」
https://go-journey.club/archives/5222
