next up previous contents
Next: 演習課題 Up: フィルタリング Previous: iplog

SSH(Secure SHell)

SSH(Secure SHell) は認証に公開暗号鍵を用い、アプリケーション層で 暗号回線を可能にするソフトウェアです。認証メカニズムが強力で、 回線の暗号化により全ての通信が秘匿されるので、外部からのアクセスや 内部からのファイアーウォールのアクセスなどに用いるのに最適です。 FreeBSD では、Fsecure社のSSHではなく、OpenSSH を標準で搭載し、 通常のインストールでは、標準で /etc/rc.conf に


sshd_enable="YES"

と設定され、 SSH のサーバが自動で走るようになっています。 (SSH v1,v2 に対応しており、サーバの RSA,DSA キーは自動で生成されます)

SSH の概念は下の図のように考えれば良いでしょう。

まず、telnet を用いて、クライアントからサーバにアクセスすることを考え ます。このコネクションをSSHの作った暗号回線を通すために、クライアント 自身のあるポートに暗号回線の入口を作ります(これはSSHのクライアントソフト の役割です)。そして、telnet を用いて、この入口に入ると(例えば、telnet localhost 3000) などのようにして、SSHが暗号回線を通してサーバのSSH側 へと自動的に送り、サーバの適当なポートから現れます。つまり、サーバ から見れば、サーバから telnet をユーザがかけているように見える訳です。 クライアントから見れば、自分自身の変なポート(3000)にアクセスしている だけのように見えます。これは、telnet だけに限らずに、どんなアプリケーション であろうと、全て同じように扱えます。そういう意味で、SSH の作る暗号 回線は土管のようなものだと思えば良いでしょう。

さて、では SSH を使うために必要な事ですが、SSH では公開鍵と 秘密鍵とパスフレーズの組合せを用います。パスフレーズはパスワード のようなものですが、パスワードと違うのは空白を含む非常に長い フレーズを使える点が違います。 そして、サーバ側に自分の公開暗号鍵を、それに対応する秘密鍵を 自分のクライアントマシンにおき、SSH client を使ってサーバに アクセスします。従って、まず、鍵を生成しなければなりません。

鍵の生成はFreeBSDでは、ssh-keygen コマンドで行います。 OpenSSH では SSH version1 と SSH version2 に対応していますが、 それぞれ RSA と DSA という異なる暗号キーを利用しますので、 両方のプロトコルを使いたい場合には、オプションを変えて2回 ssh-keygen コマンドを走らせる必要があります。


> ssh-keygen
Generating RSA keys:  Key generation complete.
Enter file in which to save the key (/home/kanayama/.ssh/identity): 
Created directory '/home/kanayama/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/kanayama/.ssh/identity.
Your public key has been saved in /home/kanayama/.ssh/identity.pub.
The key fingerprint is:
...


> ssh-keygen -d
Generating DSA parameter and key.
Enter file in which to save the key (/home/kanayama/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/kanayama/.ssh/id_dsa.
Your public key has been saved in /home/kanayama/.ssh/id_dsa.pub.
The key fingerprint is:

どちらも最初の質問には単にリターンを入力するだけです。デフォルトで、 公開鍵は ~/.ssh/identity.pub~/.ssh/id_dsa.pub に、 秘密鍵は ~/.ssh/identity~/.ssh/id_dsa に保存されます。次の質問にはパスフレーズを2回入力します。この パスフレーズは空白を用いても構いませんが、なるべく長いものを入力 する必要があります(勿論、忘れたら再度登録しなおすしか方法はありません)。

次に、これらの鍵を、サーバ側には公開鍵のみを以下のファイルに入れて おきます。秘密鍵はクライアントに用いるマシンのみにおいてください。 公開鍵を入れるファイルは誰からも読めるファイルでなければなりませんが、 公開鍵はいくつでも必要なだけ入れておく事が出来ます。一般には、 クライアントマシン側で鍵は生成し、公開鍵のみをサーバのホームディレクトリ に置くようにします。 RSA 公開鍵は ~/.ssh/authorized_keys に入れ、DSA 公開鍵は ~/.ssh/authorized_keys2 に入れます。秘密鍵はサーバ側に置いていて はいけません。


   > cd ~/.ssh
   > touch authorized_keys
   > chmod 644 authorized_keys
   > cat  identity.pub  >>  authorized_keys
   > touch authorized_keys2
   > chmod 644 authorized_keys2
   > cat  id_dsa.pub   >>  authorized_keys2

最初に説明したように SSH では様々なコネクションを暗号回線を通じてサーバ 側に送る事ができるようになっています(X-Window プロトコルですら転送出来ます)。 そのために SSH のクライアントソフト には多くのオプションがあります。しかし、ここではSSHを用いて、サーバに ログインする方法のみを紹介します。詳細については、man を参照してください。

SSH version1 でログインする場合には、コマンド ssh を用いて、


   > ssh gate
   Enter passphrase for RSA key 'kanayama@myroom.wakhok.ac.jp':

のようにします。パスワードの代わりにパスフレーズを聞いて来ます。

SSH version2 の場合は、オプション -2 を指定します。


   > ssh -2 gate
   The authenticity of host 'gate' can't be established.
   DSA key fingerprint is 0a:c0:43:fe:4f:ab:72:b4:51:e1:f0:08:81:f6:4c:a7.
   Are you sure you want to continue connecting (yes/no)? yes
   Warning: Permanently added 'gate' (DSA) to the list of known hosts.
   Enter passphrase for DSA key '/home/net/staff10/kanayama/.ssh/id_dsa':

なお、始めて入るサーバの場合には相手のサーバ側のDSA鍵を確認するメッセージ が出て来ます。これは、SSH では rsh と同じことを安全に行うために、マシン 自体の認証も行うからです。 yes と答えておけば良いでしょう。すると、パスフレーズの入力が促されます。 後は、通常の telnet と同じように使う事が出来ます。



Noriyo Kanayama