Edited at

SSH通信って、結局何してるの?

「SSH通信って何やねん」とは思いながらも、言われるがまま鍵を作って書いてあるコマンドを打ち込んで通信して... という方、多いのではないですか?

実際僕もその一人でした。

ですが、それではダメだと感じました。

そして勉強し、理解した情報を整理してまとめようと決心しました。

そう、2016年、僕は「与えられる人」から「与える人」への転身を図ると決めたのです...!!

...とまぁ僕の私情はさておき、

この記事では、曖昧なSSH通信のその中身を見ていければと思っています。


SSH通信とは

SSH通信とは、Secure Shell の略で、言わばセキュリティの強固な通信方法のことです。

SSH通信を用いて送られている情報は全て暗号化されており、

仮に通信を覗き見をされていたとしても、

「は? 何書いてあんねん」

と、その内容は闇のベールの中に包まれたままとなっております。

では、どのようにしてセキュリティを強固にしているのか。

これが重要ですよね。


SSHの仕組み

通信の全体的な流れは下記です。

[local]1.通信用の秘密鍵・公開鍵の作成

[local]2.サーバーに公開鍵を渡す

[server]A.サーバーにユーザーを登録する(sudo権限)
[server]B.サーバーに登録されているユーザーと、渡された公開鍵を紐づける
※この状態で初めて作成したユーザーによるサーバーへのログインが可能となります。

[local]3.作成したユーザーでログイン

[server]C.ログイン時に乱数を生成
[server]D.Cで生成した乱数から、ハッシュ値を生成
※このハッシュ値は認証で使うのでサーバー側で保持しておく。
[server]E.受け取った公開鍵 + Cで生成した乱数を用いて、暗号を生成
[server]F.Dで作成した暗号をローカルに送る

[local]4.1で作成した秘密鍵を用いて、送られてきた暗号を解読し、乱数を復元する。
[local]5.乱数からハッシュ値を計算し、そのハッシュ値をサーバーに送る。

[server]G.送られてきたハッシュ値と、Dで生成したハッシュ値を比較。
一致していれば認証成功。以後全ての通信は暗号化されることとなります。

上記を画像にすると、このようになります。

ssh.png

なんとなく流れは掴めたでしょうか??

単に言われたままコマンドを打ち込むのと、上記を理解した上でコマンドを打ち込むのでは天地の差があります。

ぜひおおまかな流れだけでも頭に入れておきましょう!