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)です。
サーバー側
- 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に関しても、最新バージョンにアップデートしておきました。依存関係から次のパッケージが必要になるかもしれません。
ちなみに、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の下に、次のようなファイルが生成されます。
今、sshdを起動させる必要はないのですが、次項で設定ファイルをいじるので、一度起動させて下さい。
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で、色々設定項目がありますが、今回は、
というように変更します。あと、安全のために、PasswordAuthenticationもnoにしておいてもいいかもしれません。変更後は、
# /etc/rc.d/init.d/sshd restart
として、sshdを再起動しておきます。
$ 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にidentityとidentity.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
のような手順です。ここでも、パーミッションを確認して、600や644にして下さい。同時に作成された秘密鍵(identity)は厳重に管理するのは言うまでもありません。
最後に、クライアント側の設定ファイルは、/etc/ssh/ssh_configですが、今のところ特にいじる必要はありません。また、ユーザーごとに設定する場合は、~/.ssh/configで行ない、~/.ssh/configはssh_configより優先されます。
$ 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で行なえます。
$ ssh -l -v (ユーザー名)@(IPアドレスかホスト名)
のように-vをつけて実行すると、色々なメッセージが表示されるので、解析の助けになります。
(2002年1月2日)
(2002年1月14日修正)
(2002年1月20日改訂)