SSH(Secure SHell)

従来より、企業で重要なデータをやり取りするには、専用線接続環境が求められ、多くの出費を重ねてきた企業も多い。一般的な交換回線による方法で、一時的な専用線接続のようにしてつなぐことも考えられるが、遠距離の場合は遠距離通話料金がかかるのでそれも多くの出費が必要である。

そこで、安い回線環境、インターネットを用いて仮想的な専用線接続を利用しよう というのが、VPNの役割である。このVPNの機能をささえているのがSSHである。

■第1章 専用回線 via インターネット

インターネットを構成しているTCP/IPプロトコルでは、基本的にデータに何か加工するということはされない。つまり、TCP23番ポートを介して通信されるデータおよび、パスワードなどは、すべて平文で流れている。Linuxなどでは、tcpdumpコマンドを使用することで、通信内容は比較的容易に知れてしまうのだ。 

SSHでは、通信の全内容が暗号化されるため、パスワードおよびデータの内容は用意に解読されることは無い。また、この暗号化を行うためのキーはセッションごとに毎回変わるため、事実上傍受することは不可能である。ちなみに、認証時には、RSAの公開鍵暗号方式が利用でき、このときに、サーバおよびクライアントでそのセッション中に用いる秘密鍵の受け渡しをおこなうのだ。 

■第2章 SSHぃ?

SSHとは、Secure SHellの略で、いわゆるtelnet, rshの変わりに使うことができます。ただし、その通信内容は認証時からすべて暗号化されています。SSHは、sshとsshdというサーバ側デーモンにより構成されるクライアントサーバシステムです。 

通常、telnetでunixにログインするには、パスワードの入力を要求されます。

しかし、RSA認証をONにしたSSH環境では、パスワードを入力することなく、しかも強力なセキュリティで守られた通信が可能になります。


セキュアでないほう(telnetd)は不要になるため、サービス自体を停止することを推奨します。 

■第3章 Port Forward

ここからが実用的になるのだが、この22番ポートでのセッションを通じて、ほかのポートのコネクションを転送することができる。いわゆるポートフォワードだ。

例えば、メールのやり取りをセキュアなものにするのはいい例だ。対象となる、smtpやpop3のサーバに対して、SSHの23番のトンネルを使って、こっちの情報を転送する。

ただ、実際はもっと違ったイメージで、リモートのSMTP、POP3サーバが手元のマシン上にあるようなイメージだ。つまり、自分のマシン上に仮想的なSMTPサーバやPOP3サーバが上がっているような感じを受けた。

自分のマシン上のPOP3のポートにアクセスすると、そのアクセスはSSHで接続されているサーバのPOP3のポートへとフォワードされるのだ。もちろん自分のマシンでPOP3サーバが実際に走っているなら、別のポート番号(例えば2000番など)をリモートのマシンで動作しているPOP3のポートへのフォワード用に設定すれば、問題ない。
 

■第4章 Let's Install!

さて、理屈ばかりじゃなにもできないので、実行実行。サーバをLinux、クライアントをWindowsとしよう。
 
Linuxへのssh1のインストール
まず、適当なところからsshのソースをゲットしてきます。わたしは、ssh-1.2.30.tar.gzをいただいてきました。まずは、例のごとく展開しましょう。
 
$ tar xvfz ssh-1.2.30.tar.gz
 
展開されたディレクトリに入って、例のごとく、configure, makeします。  
$ cd ssh-1.2.30
$ ./configure
$ make
 
以上で、バイナリが生成されます。つぎは、インストールです。ここは、rootになって作業してください。
 
$ su
ルートパスワードを入力
$ make install
 
インストール作業は以上で終了です。とりあえず、sshが正常に動くかチェックしてみましょう。sshはデフォルトでは22番ポートを使用します。
$ telnet localhost 22
Trying 127.0.0.1...
Connected to jedi.
Escape character is '^]'.
SSH-1.5-1.2.30
 
SSHが動作しているのがわかりますね。この状態では、enterでも押下してください。コネクションが終了します。
 
Windowsへのttsshのインストール
ttsshは、TeraTermProという通信ソフトへのSSH機能のアドオンを提供します。TeraTermProは非常に有名なソフトウェアなので、ご存じの方も多いでしょう。国内では窓の杜あたりから取得できます。ここでは、TeraTerm自体のインストールの解説はしないので(というか、インストーラ一発ですね)、適宜インストールを進めてください。
TTSSHは、こちらなどからゲットします。TTSSHのインストールについて特に難しいことはありませんが、TeraTermProをインストールしたディレクトリに解凍したファイルを入れることだけは忘れないでください。
また、TTSSHを入れた後は起動するEXEファイルが変わります。TTSSHのインストールでTTSSH.EXEができていると思います。こちらを起動することです。SSH対応にしても、従来通りTELNET接続は可能なので、ショートカット自体を入れ替えておくといいでしょう。

■第5章 鍵作り

今回はRSA認証を行います。RSA認証では、公開鍵暗号方式を使います。アクセスされる側(Linux)には、あなたの公開鍵を登録します。アクセスする側(windows)には秘密鍵を持っておきます。このシステムでは、パスワードを入力しなくてもLinux側に入ることができます(しかも、伝送路は暗号化されるので安全です)。
 
ttsshには、鍵を生成する機能はないので、Linux側で鍵を生成することにしましょう。sshをインストールした時点で、鍵生成のプログラムssh-keygenもインストールされているハズです。自分のホームディレクトリで、ssh-keygenを実行すると次のように表示されます。
 
$ssh-keygen
Initializing random number generator...
Generating p: ..++ (distance 42)
Generating q: ................................++ (distance 458)
Computing the keys...
Testing the keys...
Key generation complete.
Enter file in which to save the key (/home/rata/.ssh/identity):
Enter passphrase:
Enter the same passphrase again:
 
生成したキーをどこに保存するか聞いてきていますね。デフォルトのままでよければ、enterを入力しましょう。すると次はパスフレーズの入力を促してきます。パスフレーズとは、自分の鍵のためのパスワードみたいなものです。これは必須ではありませんが、Windowsなどのように誰でも鍵を見れてしまう環境にあるようなときは、設定しておいた方がいいかもしれません。とりあえず、ここでは空にします。
 
Your identification has been saved in /home/rata/.ssh/identity.
Your public key is:
1024 33 1143(中略)53991 rata@jedi
Your public key has been saved in /home/rata/.ssh/identity.pub
 
すると、秘密鍵(identification)は/home/rata/.ssh/identityに保存されましたと表示されます。また、公開鍵(public key)が表示されます。無駄に長いので中略しましたが、公開鍵は見られても問題ありません。通常の通信路(電子メールなど)でやりとりしてもかまいません。この公開鍵は、/home/rata/.ssh/identity.pubに保存されましたと表示されていますね。
 
注意:これから生成した秘密鍵(identify)をアクセスする側(Windows)にコピーしますが、この鍵は安全でない伝送路(電子メール)でのコピーはいけません。安全な方法(FDとかね)で、コピーしましょう。

■第6章 コネクト

さて、それでは接続をしてみましょう。まず、Linux側。アクセスする人の公開鍵を登録する必要があります。これは簡単です。先ほど生成した公開鍵(identify.pub)を.sshディレクトリのauthorized_keysというファイル(ない場合は作成)にコピーします。
注意:このauthorized_keysファイルには実行権が必要。Permission 700などを指定しておかないとダメ。  
$ cat identify.pub >> authorized_keys
 
これで、受け入れ側の体制は整いました。
今度は、Windows側です。TTSSH.EXEを起動し、Linuxサーバへと接続します。このとき、ServiceがSSH、TCP port#が22番になっているのを確認してください。すると最初の接続で、次のような画面が出てくるでしょう。これは、Linuxサーバにあなたのwindowsマシンが登録されていませんよ。という警告です。このマシンをLinuxに登録するために、チェックボックスをチェックして、Continueを押してください。
 

 
すると次のような画面になります。今回はRSA鍵を使用するので、先ほど安全な方法でコピーしたRSA秘密鍵をPrivate Key Fileの欄に指定します。パスフレーズを指定している場合は、Passphraseの欄に入力します。
 

 
あとは、OKボタンを押せばパスワードの入力もなにもなしで、ログインできます。しかも、伝送路は暗号化されてるし、一石二鳥ですね。

■第7章 ポートフォワード実験

さて、伝送路も暗号化されたので、この暗号化された伝送路でポートフォワードしてみましょう。今回の実験に使うのは、httpプロトコル。いわゆるWWWですね。まず、リモートではwwwサーバを上げておきます。
 
WindowsからLinuxへSSHで接続しておきます。接続できたら、SetupメニューのSSH Forwardingを選択します。すると次のような画面が表示されるので、Addボタンを押して、フォワードするポートを追加します。次の画面では、ローカル(Windows)のどのポートを、サーバ(Linux)のどのポートに通すかを設定します。ここでは、ローカルWWW(80)のポートへのアクセスは、リモート(192.168.1.1)のWWW(80)に通すように設定しています。
 

この画面をOKで抜けると、すでにローカルポートへの80番の接続はすべて、サーバ(Linux)の80番への接続にフォワードされています。実際、ローカルへのブラウザでの接続で試してみましょう。
 

 
localhostへのアクセスなのに、実際はLinuxの80で受けているアプリケーションにフォワードされるため、Linux側で動作しているhttpサーバのレスポンスを受け取ることができます。これを利用すると、イントラネットの情報をインターネット経由で、安全に送受信することが可能になります。
戻る