[1]なぜsshなのか

(1)r系コマンド、telnet,ftpの問題点

通常、ネットワークを通したマシン間でのログインやリモートコピーなどを行なう場合に、telnet,ftp,rlogin,rcp,rshなどを利用することが多いと思います。
しかし、これらは以下の点においてセキュリティ上の問題を含んでいます。

  1. マシンの「なりすまし」
    r系コマンドは、trusted hostと言われる概念を利用して、接続先ホスト上で登録された「信用できるマシン」のユーザー認証を省略し、接続先ホストへアクセスをすることができます。
    これはIPアドレスやDNS、routing情報を偽るような攻撃に対して無防備であり、クラッカーが「信用できるホスト」と偽ることで、容易に、接続先ホストへの不正アクセスを許してしまうことになります。r系コマンドはIPアドレスによってホストを識別するため、これら「なりすまし」攻撃に対しては何の防御もできません。

  2. 通信内容の盗聴、改竄
    r系コマンドやtelnet,ftpの通信内容は平文のまま送信されます。
    従って、クラッカーが何らかの方法を用いて、通信路上で、その通信内容を盗聴し内容を解読することができ、更には、その内容を改竄することも可能です。

(2)sshの特長

ここでは、接続元ホストをクライアントと呼び、接続先ホストをサーバと呼びます。

sshは(1)で述べたセキュリティ上の問題を解決してくれます。
sshは以下に述べる認証の仕組を使って、通信を行なっています。

  1. セッション鍵の共有化
    sshは実際のデータを送受信するに先だって、サーバとクライアント間で、セッション鍵と呼ばれる鍵の共有をします。
    サーバとクライアント間でセッション鍵が共有されると、sshは以降の全ての通信に対して、秘密鍵暗号化方式(標準ではDES)を利用してデータのやりとりを行ないます。




  2. ホスト認証
    sshではクライアントが正しいことを認証するために、公開鍵暗号化方式(標準ではRSA)を利用します。
    ホスト独自の一対の秘密鍵と公開鍵を持ち、サーバはクライアントの公開鍵を使ってクライアントの認証を行ないます。
    この認証を行なう際には、クライアントとサーバ間でセッション鍵と呼ばれる鍵を共有していることが前提となります。( 1)参照 )このセッション鍵の共有はsshの接続が開始される際に、自動的に行なわれますので、利用者は特にセッション鍵を意識する必要はありません。



  3. ユーザー認証
    通常、サーバへ接続する際にパスワード認証を行ないますが、sshでは、それに加えて公開鍵暗号化方式を利用したユーザー認証を行ないます。
    これもホスト認証と同様に、ユーザー独自に用意した秘密鍵と公開鍵を使って、ユーザーの認証を行ないます。

[2]sshツールの基本的な使い方

sshで用意されているツールの基本的な使い方の説明です。更に詳しい使い方が知りたい場合は、manを参照ください。

(1)よく使うコマンド

Options
-c cipher暗号化アルゴリズムを選択する。
cipher には idea,3des,blowfishが指定できる。
-Cデータを圧縮して送信する。
圧縮レベルの指定は ~/.ssh/config で指定する。
-fバックグラウンドプロセスとして起動する。
ssh -f muse01 kterm のように使う。
-i fileユーザー秘密鍵ファイルを指定する。
defaultでは ~/.ssh/identity
-l userログインする時のユーザー名
-o 'option'~/.ssh/config で定義できる命令を指定することができる。
-q warnningメッセージの表示を抑止する。
-vデバッグメッセージを表示する。

(2)ssh-keygen

そのマシンで利用するユーザーRSA鍵を生成します。
ユーザーRSA鍵のパスフレーズを聞かれますので、覚えやすく推測されにくい文字列を入力してください。
パスフレーズは、ユーザーの秘密鍵の漏洩を防ぐためのもので、パスフレーズがわからなければ秘密鍵を利用することはできません。つまり、公開鍵で暗号化されたデータを秘密鍵で復号化する際に、パスフレーズが必要になります。
ssh-keygen ユーザーRSA鍵(秘密鍵と公開鍵)の生成
ssh-keygen -c ユーザーRSA鍵のコメントを変更する
ssh-keygen -p ユーザーRSA鍵のパスフレーズを変更する

(3)その他のツール

  1. ssh-agent
    秘密鍵を利用する際に、必要となるパスフレーズを管理するツールです。
    ssh-agentを利用することで、パスフレーズを自分で入力することなく、秘密鍵を利用することができます。

  2. ssh-add
    ssh-agentに利用するユーザーRSA鍵を追加することができます。
    ssh-agentを利用する場合は、使用するユーザーRSA鍵をssh-addを使って追加する必要があります。

[3]ユーザーRSA認証を用いた接続

パスワードによるユーザー認証に加えて、更に安全な通信路を確保するためにRSAを用いてユーザー認証を行なう場合の設定方法を説明します。

(1)ユーザーRSA認証の設定

  1. ユーザーRSA鍵の生成
    ユーザーRSA鍵(公開鍵と秘密鍵)を生成するには、ssh-keygenというコマンドを使います。このコマンドにオプションを付けずに実行すると、以下のコメントを付加してRSA公開鍵を生成します。
    コメントは、RSA公開鍵だけに付加されるものです。
    ユーザー名@ホスト名
    コメントをメイルアドレスにしてRSA公開鍵を生成したい場合は -C オプションをつけて、実行します。

    > ssh-keygen -C welcom19@mse.waseda.ac.jp [return]
    Initializing random number generator...
    Generating p:  ...............++ (distance 300)
    Generating q:  ......++ (distance 34)
    Computing the keys...
    Testing the keys...
    Key generation complete.
    Enter file in which to save the key (/homea/welcom19/.ssh/identity):
    ユーザーRSA鍵の秘密鍵を保存する場所、ファイル名を指定する。
    
    Enter passphrase: 
    ユーザーRSA鍵の秘密鍵を利用するためのパスフレーズを入力する。
    
    Enter the same passphrase again: 
    
    Your identification has been saved in /homea/welcom19/.ssh/identity.
    Your public key is:
    1024 37 110525....0539735558527266977069 welcom19@mse.waseda.ac.jp
    Your public key has been saved in /homea/welcom19/.ssh/identity.pub
    
    
    これにより、~welcom19/.sshの下に以下のファイルが生成されます。
    identityユーザーRSA鍵の秘密鍵
    identity.pubユーザーRSA鍵の公開鍵
    これらファイルのアクセス権は
    -rw-------identity
    -rw-r--r--identity.pub
    となっています。

    秘密鍵(identity)は、他者が見ることができないようにアクセス権を設定しておくようにしてください。

  2. authorized_keys ファイルの生成
    authorized_keysファイルは、信用のできる自分のユーザー公開鍵を登録するファイルです。
    sshでは、接続する際にクライアント上のユーザー公開鍵(identity.pub)がサーバ上のauthorized_keysファイルに登録されているかをチェックし、登録がされていない場合は、接続が拒否されます。

    [理工UNIXシステムのマシン間で接続する場合]
    ユーザーのホームディレクトリを共有しているので(~/.ssh以下のファイルが共有されている)、理工UNIXシステムのマシン上で1度、生成したユーザー公開鍵は、authorized_keysへ登録することで、クライアント(接続元)のユーザー公開鍵がサーバ(接続先)へ登録されることになります。

    [理工UNIXのマシン以外から接続する場合]
    上記の場合と違いクライアント(接続元)とサーバ(接続先)とでホームディレクトリを共有していません。従って、各クライアントで生成したユーザー公開鍵をサーバへ登録する必要があります。
    その場合、各クライアントで生成したidentity.pubファイルをサーバへftpなどを利用してファイル転送をしてサーバ上の~/.ssh/authorized_keysへidentity.pubの内容を追加する必要があります。

    (1)で生成された ユーザー公開鍵(identity.pub)をauthorized_keysへ登録します。

    > cat ./identity.pub >> ./authorized_keys

    これで、ユーザーRSA認証が設定されました。

  3. ログインをしてみる

    > slogin muse01
    Enter passphrase for RSA key 'welcom19@mse.waseda.ac.jp':
    ssh-keygenで設定したパスフレーズを入力する。
    
    Last login: Wed May  5 13:20:34 1999 from 133.9.7.96
    Sun Microsystems Inc.   SunOS 5.7       Generic October 1998
     
    ##############################################################
            Your E-mail address is  welcom19@mse.waseda.ac.jp        
    ##############################################################
     
    You don't have any mail waiting on mse-popd mse-mail
    >  
    
    パスフレーズを間違えて入力した場合

    > slogin muse01
    Enter passphrase for RSA key 'welcom19@mse.waseda.ac.jp': 
    Bad passphrase.
    パスフレーズが違う。
    
    welcom19@muse01's password:
    パスワード認証を行なう。
     
    Last login: Thu May  6 16:21:21 1999 from muse01
    Sun Microsystems Inc.   SunOS 5.7       Generic October 1998
     
    ##############################################################
            Your E-mail address is  welcom19@mse.waseda.ac.jp        
    ##############################################################
     
    You don't have any mail waiting on mse-popd mse-mail
    > 
    

(2) ユーザーRSA認証の設定変更

(1)の場合、ユーザー鍵のパスフレーズを知らなくても、パスワードさえ知っていれば、ログインすることができます。
これを、パスフレーズを間違えるとログインを出来なくするように設定することもできます。

  1. configの作成
    ~/.ssh/configはssh利用時の環境を定義します。
    ここでは、ユーザーRSA認証に必要な設定部分のみを説明します。

    viやemacsなどのエディタを使ってconfigファイルを記述します。

    > vi ~/.ssh/config
    ~/.ssh/config の内容
    ------------------------------
    Host *
    PasswordAuthentication no
    ------------------------------

  2. ログインをしてみる

[参考]

Windows95やWindows98から理工UNIXシステムへsshを利用して接続する場合、Windows側(クライアント)で使用するtelnetプログラムがssh対応になっていないといけません。
telnetプログラムにTeraTermを使っている場合は、ttsshというフリーソフトウェアを追加することでsshに対応した接続が可能になります。
また、DOSプロンプト上で直接、sshコマンドを利用できるフリーソフトウェアもあります。

SEE ALSO <on-line>
sshのTOPページ
理工メディアセンター