ファイルサーバー構築 〜SSHの導入(Linuxクライアントからの接続)〜


SSHを導入したおかげで、キーボードとマウスを外すことができました。という事でSSHの導入方法です。ネットワークを介して他のコンピュータを操作する時、TELNETやrlogin等を使いますが、TELNETなんかでは、パスワードがそのままの形(平文)でネットワークに流れてしまいます。Etherealなんかを使うと、パスワードを見る事ができてしまいます。例えば、

でTELNETログインする様子が、こんな風に見えてしまいます。いわゆる盗聴ってやつですね。コワイ、コワイ。

つう事で、SSHを導入しました。これを使うと、ネットワーク上を流れるデータ(パスワード等)が暗号化され、盗聴等を防ぐ事ができます。機能としては、TELNETやrloginの代わりとなるssh、rcp(リモートコピー)の代わりとなるscp、ftpの代わりとなるsftp(ただしSSH2プロトコルのみでサポート)が提供されます。

ただ、SSH自体は、フィンランドのSSH Communications Security社のSSHが大元なんですが、ライセンスの問題より、ライセンスフリーのOpenSSHが最近のトレンドです。また、TurboLinuxにもインストールされています。で、導入に関して、いろんなWebサイトで調べたんですが、なかなか複雑で調べられた範囲で書いていきます。

まず、SSHではサーバーとクライアントとの間で、SSHプロトコルという専用のプロトコルを使用します。このSSHプロトコルには、バージョン1(SSH1プロトコル)、バージョン2(SSH2プロトコル)があり、互換性はありません。また、SSH2の方が機能が多く、より安全なのですが、Windowsからもログインしたいとなると、SSH1プロトコル(バージョン1.5)を使う必要があります。という事で、環境によって、どちらのプロトコルを使用するかを決める必要があります。また、(クライアントの)認証にもRSA認証、パスワード認証等いくつかの方式があり、その中でも最も安全なのがRSA認証です。

ここでは、まずSSH1プロトコルを使って、RSA認証で、クライアントErenorからサーバーAliciaへ、一般ユーザーtoshikunがログインできるようしてみます。ディストリビューションは、ErenorがTLW7(カーネル2.4.17)、AliciaがTLS6.1(カーネル2.2.18)です。

  1. OpenSSHのインストール
    最近(2001年12月)、OpenSSHのセキュリティホールが見つかっていますので、TLJ社の推奨通り、下記のバージョンに統一しました。アップデートでもいいんですが、まだ一度も使っていないので、(rpm -qa|grep opensshで出てきたのを)一旦全部削除し、その後でインストールしてます。一部依存関係で削除できないのについては、アップデートにしました。

    サーバー側
    • openssh-2.9p2-6.i386.rpm
    • openssh-server-2.9p2-2.i386.rpm


    クライアント側
    • openssh-2.9p2-6.i386.rpm
    • openssh-clients-2.9p2-6.i386.rpm

    TLW7用でたどった場合、i386はi586になります。また、opensslに関しても、最新バージョンにアップデートしておきました。依存関係から次のパッケージが必要になるかもしれません。

    • pam-0.72-14.i386.rpm
    • cracklib-2.7-7.i386.rpm
    • cracklib-dicts-2.7-7.i386.rpm
    • libiconv-1.3-4.i386.rpm

    ちなみに、openssh-2.9p2-2.src.rpmからリビルドすると、openssh*が生成され、openssl-0.9.6b-1.src.rpmからでは、openssl*が生成されます。また、2.9p2とかのpはプラットホームを区別しているものらしいです。インストールが終了すると、/etc/ssh以下のファイルは、

    サーバー側
    • primes
    • sshd_config


    クライアント側
    • primes
    • ssh_config

    になります。ここで、アップデートによって停止したsshd(SSHデーモン)をサーバー側で起動させると、

    # /etc/rc.d/init.d/sshd start
    Generating SSH1 RSA host key: done
    Generating SSH2 RSA host key: done
    Generating SSH2 DSA host key: done
    Starting sshd: sshd

    というメッセージと共に、/etc/sshの下に、次のようなファイルが生成されます。

    • primes
    • ssh_host_dsa_key
    • ssh_host_key
    • ssh_host_rsa_key
    • sshd_config
    • ssh_host_dsa_key.pub
    • ssh_host_key.pub
    • ssh_host_rsa_key.pub


    今、sshdを起動させる必要はないのですが、次項で設定ファイルをいじるので、一度起動させて下さい。



  1. サーバー側の設定
    まずは、Alicia(サーバー)の方で、OS起動時にsshdがデーモンとして起動するようにしておきます。これは、turboserviceで設定できます。また、Aliciaの/etc/hosts.allowに、
    sshd: 192.168.1.0/255.255.255.0

    を追記しておきます。ここの記述は各人の環境に合わせて下さい。外部からログインする可能性のある場合は、

    sshd: ALL

    でも構いません。実は、私はここでハマってしまいました。ハマった原因は、

    ssh(sshd)はinetd経由で動くのではなくて、自分自身でポートを監視する

    という事を聞いていたので、inetd経由じゃないなら(TCP Wrapperは関係無いので)、hosts.allowやhosts.denyは関係無いだろう、という先入観を持ってしまっていました(^^;)。inetd経由でないのは事実なんですが、どうも、OpenSSHはhosts.allowやhosts.denyを監視している(TCP Wrapperが仲介してるの?)らしく、また、そのための設定は、コンパイル時に決められるみたいです(--with-tcp-wrappersオプションかな?)。

    さて、サーバー側の設定ファイルをいくつか編集します。サーバー側の設定ファイルは、/etc/sshの下にあるsshd_configで、色々設定項目がありますが、今回は、

    • Protocol 1
      SSH1プロトコルを使用する
    • HostKey /etc/ssh/ssh_host_rsa_keyを追加
      秘密鍵の場所の指定

    というように変更します。あと、安全のために、PasswordAuthenticationnoにしておいてもいいかもしれません。変更後は、

    # /etc/rc.d/init.d/sshd restart

    として、sshdを再起動しておきます。



  1. クライアント側の設定
    クライアント側ではまず、RSA認証用の鍵(秘密鍵と公開鍵)を作成します。ssh-keygenにオプションをつけて実行する事で作成されます。
    $ ssh-keygen -t rsa1
    Generating public/private rsa1 key pair.
    Enter file in which to save the key (/home/toshikun/.ssh/identity):
    そのままEnter
    Created directory '/home/toshikun/.ssh'.
    Enter passphrase (empty for no passphrase):
    20文字程度の文字(パスフレーズ)を入力(当然推測されにくいもの)
    Enter same passphrase again:
    さっきのパスフレーズをもう一度入力
    Your identification has been saved in /home/toshikun/.ssh/identity.
    Your public key has been saved in /home/toshikun/.ssh/identity.pub.
    The key fingerprint is:
    61:38:7d:e1:07:00:3e:1c:64:60:fe:30:51:03:8c:b4 toshikun@Erenor

    これで、/home/toshikun/.sshにidentityidentity.pubが作成されているはずです。このうちのidentity.pubの内容を、Alicia(サーバー)の/home/toshikun/.ssh/authorized_keysというファイル名で保存(または追記)します。.sshというディレクトリが無い場合は、作成します。ただし、パーミッションを700等にして下さい。このように設定していない場合、RSA認証が使えず、パスワード認証になってしまうようです。なお、このファイルの内容は、名前の通り「公開」しても構わないので、FTPでもメールでもOKなんですが、その通信路が暗号化されているか安全が保証されている必要があります。家庭内LANでもっとも安全手軽なのはフロッピーを用いることでしょう。私はフロッピーに保存してコピーしました。

    $ mkdir ~/.ssh
    $ cat /mnt/floppy/identity.pub >> ~/.ssh/authorized_keys

    のような手順です。ここでも、パーミッションを確認して、600644にして下さい。同時に作成された秘密鍵(identity)は厳重に管理するのは言うまでもありません。

    最後に、クライアント側の設定ファイルは、/etc/ssh/ssh_configですが、今のところ特にいじる必要はありません。また、ユーザーごとに設定する場合は、~/.ssh/configで行ない、~/.ssh/configはssh_configより優先されます。



  1. 接続する
    さて、いよいよ接続です。Alicia(サーバー)のsshdデーモンを動かしてから、
    $ ssh -l (ユーザー名) (IPアドレスかホスト名)

    や、

    $ ssh (ユーザー名)@(IPアドレスかホスト名)

    で行ないます。sshはsloginでも構いません(sshへのシンボリックリンクになってる)。以下は私が実際にErenorからAlicia(192.168.1.1)にログインした結果です。

    $ ssh -l toshikun 192.168.1.1
    The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
    RSA1 key fingerprint is 98:db:8b:f4:5a:e5:9b:8b:d8:5a:a1:95:6c:22:00:dd.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.1.1' (RSA1) to the list of known hosts.
    Enter passphrase for RSA key 'toshikun@Erenor':
    クライアント側で作成したパスフレーズを入力
    Last login: Mon Jan 21 03:15:24 2002 from 192.168.1.5

    上記でyesと答えているのは、ログインしたいサーバーかどうかの確認の質問です。また、これらのメッセージは最初に接続した時に表示されるもので、2回目以降は表示されません。実は、この時にErenorの公開鍵をAliciaに登録しているのです。また、パスフレーズを間違えると、パスワードを聞いてきます。

    なお、ログアウトはexitで行なえます。



  1. その他
    基本的に上記のやり方でうまくいくはずですが、

    $ ssh -l -v (ユーザー名)@(IPアドレスかホスト名)

    のように-vをつけて実行すると、色々なメッセージが表示されるので、解析の助けになります。

(2002年1月2日)
(2002年1月14日修正)
(2002年1月20日改訂)