前書き
VScodeからGitHubとSSH接続する方法がわからなかったので調べてみた。タイトルにはVScodeと記述しているが、特にVScodeに限った話ではないので、様々なアプリケーションやサービスでも同様である。
SSH接続とは
SSHは「Secure SHell」の略で、暗号技術を用いてSecure(安全)な通信を可能にするプロトコル(データをやり取りする際の決まり事)。自分のPCからサーバにリモートログインしたり、ファイルを転送する際に使用されるのが最も一般的である。
公開鍵認証方式
公開鍵認証は「秘密鍵」と「公開鍵」という2種類の鍵のペアを用いて行う認証方式である(鍵と言っているが実態はファイル)。サーバにログインするユーザーは事前にキーペア(秘密鍵と公開鍵)を作成しておく。そのうちの公開鍵をサーバに登録しておいて秘密鍵は自分のPC内に保管しておく。サーバにログインするときは、自分が持っている秘密鍵で署名を作成し送信する。サーバーは受け取った署名をペアとなる登録済みの公開鍵で検証し、成功した場合に限りログインを許可するという仕組みである。
公開鍵認証方式は、秘密鍵と公開鍵のペアによる暗号化・複合ではなく、署名・検証によって行われるものである。
@angel_p_57様からご指摘いただき、記事を修正させていただきました。以下の記事にSSHの公開鍵について詳しく書いてあります。
秘密鍵
- 誰にも知られてはいけない鍵が記述されているファイル。
- PC側に置いておくもの
公開鍵
- 人に知られてもよい (公開することが可能な) ファイル。
- サーバ側に置いておくもので、サーバにあらかじめ登録する必要がある。
例えば、銀行印による押印を行員がお届け済みの印影と照らし合わせて、本人確認をするようなものがこの公開鍵認証になる。
公開鍵と秘密鍵を作成する
VScodeを開きターミナルでGitbashを起動する。
まずは、鍵を格納するフォルダに移動する。
$cd ~/.ssh
そして、下記のコマンドでカギを生成する。
$ssh-keygen -t rsa
実行してみると
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
と出てくるので、そのままエンター。
デフォルトでは鍵は「id_rsa」という名前だが、例えば名前を「id_git_rsa」に変更するなら
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_git_rsa
と入力する。(空白ならデフォルトの「id_rsa」のまま) ちなみに、rsaはRSA暗号のことで暗号アルゴリズムの一つ。
エンターを押したら
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
と出てくる。ここではパスフレーズ(パスワードのようなもの)を設定できるが、無くても大丈夫なのでそのままエンターでOK
すべて実行すると、~/.ssh内に「id_rsa」と「id_rsa.pub」が作成される。
すでに「id_rsa」を過去に生成している場合、上書きされてしまうので注意する。
GitHubに公開鍵を設定する
上記からGitHubの設定画面に移動し、「New SSH key」をクリック。
titleには、公開鍵の名前を(デフォルトのままなら「id_rsa」)、 keyには公開鍵の中身を記述する。
公開鍵の中身は下記のコマンドでクリップボードにコピーできる。
#Windowsなら
$ clip < ~/.ssh/id_rsa.pub
#Macなら
$ pbcopy < ~/.ssh/id_rsa.pub
すべて記述完了したら、「Add SSH Key」をクリックして設定は完了。
SSH接続ができているか確認してみる。
$ ssh -T git@github.com
これで
Hi ユーザ名! You've successfully authenticated, but GitHub does not provide shell access.
と出てきたらSSH接続は成功。
引用
こちらの記事の内容は以下の記事から引用しています。鍵の名前を変更した際にうまくいかなかった場合なども詳しく書いてありますので、ご確認ください。
おわりに
実際に手を動かしてみることで、それぞれ単語の意味や使い方がよく分かった。SSH接続にもメリットがあれば、デメリットもあるのでもっと詳しく特徴を勉強して、用途や目的に応じてそれぞれの認証方式を正しく使い分けれるようになっていきたい。
参照サイト