ウェブログラム

実践しながらじっくり学ぶ、Webプログラム習得サイトです。自作サービスの公開までWeb開発を実践していきましょう!

Webrogram

自分のオリジナルサービスを作って運営しよう!

【SSHの仕組み】を図解で簡単に解説してみる!

さて今回は「SSHの仕組み」について図解で解説をして行こうと思います。

SSHAWSやローカル開発環境などを使う場合には、ほぼ必須と言っていいほど必要な技術です。 なんとなくサーバに接続できたけど、「SSHってなに?」、「公開鍵ってなに?」と良くわからない事だらけだと思います。

この辺の仕組みを理解して、どうやってサーバに接続しようとしているのかを叩き込んでいきましょう。

SSHの仕組みをざっくり解説

最初にざっくりと仕組みを説明します。

PC側とサーバ側があったとして説明します。 PC側からサーバ側に接続したいとします。

PC側で秘密鍵と公開鍵を作成します。この時秘密鍵は絶対に他のサーバや人に渡してはダメです。 接続したいサーバに公開鍵を送ります。

そして、PC側からSSH接続を試してみると、自分が作成した公開鍵がサーバ側にあるので、 自分の持っている秘密鍵とペアということになり、接続が成功します。

ざっくりとこんな感じですが、もっと詳しく見ていきましょう。

SSH接続の登場人物

SSH」での登場人物を紹介します

f:id:iku8:20180825144445p:plain

よく耳にする単語が出てきましたが、これらがSSHで使用する技術です。 それでは解説していきましょう。

SSH接続の流れ

SSHで接続する流れは以下です。

  • 自分のPCで「秘密鍵」、「公開鍵」を作成する
  • 接続したいサーバに作成した「公開鍵」を置く
  • PC側からサーバにSSH接続したいと伝える
  • サーバ側は置いた「乱数」を用意して「公開鍵」で「乱数」から「ハッシュ値」を生成する
  • さらにサーバ側で「先程の乱数」と「公開鍵」を使って暗号を作って、暗号をPC側に送る
  • 暗号を受けったPC側は「秘密鍵」を使って、暗号を複合して「乱数」を取り出す
  • さらにPC側は取り出した「乱数」からハッシュ値を生成
  • PC側で生成した「ハッシュ地」をサーバ側へ送る
  • サーバ側はPC側から受け取った「ハッシュ値」とサーバ側で生成した「ハッシュ値」を比較する
  • ハッシュ値を比較して一致していれば、SSH接続が完了する

f:id:iku8:20180825150908p:plain

といった流れです。結構たいへんですよね。 これらの細かい内容は「裏でこういうことをしているんだ」という認識で良いと思います。

秘密鍵と公開鍵

中核の技術ですね。

SSH接続をするには2つのペアの「鍵」を作る必要があります。 PC側とサーバ側があったとして、2つの鍵を作るのはPC側です。

秘密鍵は絶対に自分のPC以外には移してはいけません。※これは覚えておいてください。 移して良いのは公開鍵のみです。

さっきから「鍵」と読んでいるものは、ただのファイルです。 ファイル中身をみてみると、公開鍵も秘密鍵も意味不明な文字列が並んでいるだけです。これが鍵の正体です。

公開鍵で何ができるのか

公開鍵で出来るのは、暗号化です。 例えば、サーバと通信するときの「やりとりの内容」を暗号化してくれます。 一度、公開鍵で暗号化したものについては、「秘密鍵」でしか復号化(元に戻す)できません。

なので、秘密鍵を誰かにあげたりしたらダメなんです。

この公開鍵は接続したいサーバに送ります。 これで、自分のPC側には「秘密鍵」、サーバ側には「公開鍵」がある状態になります。

乱数と公開鍵で暗号作成

サーバが側には今「公開鍵」がある状態ですね。 PC側から接続要求が来たとき、「本当にそのPCは接続してよいPCなのか」というのを確認するため、 サーバ側に送られている「公開鍵」を使って認証を行います。

サーバ側では公開鍵+乱数を使って暗号を作成します。 この乱数はサーバ側で勝手に作成されます。

公開鍵+乱数で作成された暗号は、接続要求をしてきたPC側に送ります。 また、この時サーバ側では乱数をハッシュ化して置いておきます。←後に認証で使います。

秘密鍵での複合

さて、サーバ側からPC側へ「暗号」が送られてきました。 この暗号はPC側の秘密鍵でしか複合できません。

PC側には秘密鍵があるので、その秘密鍵を使って複合を行います。 複合されると「サーバ側で作成された乱数」が取り出せます。

乱数からハッシュ値を生成して、サーバ側に「ハッシュ値」を送ってあげます。

サーバ側では「既に生成したハッシュ値」と「PC側から送付されたハッシュ値」がある状態です。 この2つを比較して、一致していれば「接続要求をしているPCは正しい接続元」となります。

これで、見事「SSH接続」が完了します。

まとめ

SSHは裏で結構大変なことをしているのが分かったかと思います。 ですが、実際に利用するときは「秘密鍵」、「公開鍵」くらい分かっておけば何ら問題はありません。

実際に自分でSSH接続の設定をしてみると、理解しやすくなるかと思います。 このSSHAWSやローカル開発環境などでは、ほぼ必須の知識なのでぜひ覚えて、設定方法などもマスターできるようになりましょう。

また、別の記事でSSHの接続設定についても解説しますので、お楽しみに。