SSHとは?
UNIXのコンピュータは、ユーザがコマンドを入力し操作をします。
そのコマンドを、ネットワーク経由でリモートから実行できるプログラムを telnet といいます。
昔はこのtelnetで、離れているコンピュータの操作をしていたんです。
でも、このtelnetはセキュリティのことはほとんど考えられていなかったので、簡単に盗聴できてしまいます。
そこで、このtelnetの通信を安全に行おうとして考えられたのが、SSH(Secure Shell)です。
このSSHも、これまで説明してきたSSLやPGP、S/MIMEと同じく、暗号の鍵のやり取りに、公開鍵暗号方式を使っていますね。
SSHが良く使われるのは、telnetを暗号化することが多いんですが、実はtelnetだけじゃなく、他のプログラムの通信も暗号化することができます。
この機能はポートフォワードと言われます。
例えばWebを参照するためのプロトコルは、「HTTP」でしたね。これは、ポート番号としては「80」番を使っています。
通常はブラウザが、Webサーバの待ち受けている80番ポートに対して接続をしますよね。
【ブラウザ】 — (Internet) –> 【(80) Webサーバー】
では、SSHを使ったポートフォワードの場合を見てみましょう。
ブラウザを持つPC上で「SSHクライアント(SSH CL)」のプログラムが入っていて、Webサーバ上には「SSHサーバ(SSH SV)」が動作しているとします。
そうすると、SSHを使ったポートフォワードは以下のような流れになります。
【ブラウザ –> SSH CL】 — (Internet) –> 【SSH SV –> (80) Webサーバ】
わかりますか?
1. ブラウザはSSHクライアントをプロキシとして通信開始
2. SSHクライアントはSSHサーバと暗号化通信をし、HTTPが通れるトンネルを作る。
3. ブラウザからのHTTPは、SSHのトンネルの中を通って、Webサーバに届く
このように、SSHで作られた暗号トンネルの中を通って通信が行われるわけです。
この仕組みを使えば、HTTPだけじゃなく、メール(SMTP・POP3)やFTPなど色々な通信を、SSHのトンネルを使って利用することが出来ます。
ちなみに、SSHには SSH Communications security(SSH社)が販売するものと、非商用のOpenSSHがあります。
ただ、SSHは一般ユーザが利用するほど普及しているとは言えず、自宅サーバを構築している方や、企業などでリモートから操作、ファイルコピーなどを安全に行いたいと考えている人が使ってるのがほとんどだと思います。