SSHでリモートログインを安全に

SEIL はデフォルトで telnetd (TELNETサーバ)機能が有効になっており、TELNET でログインして設定ができるようになっています。しかし TELNET プロトコルは通信路の暗号化がされないなどセキュリティ上の問題があり、安全なネットワーク以外での利用には向きません。そこで、本日は TELNET ではなく SSH プロトコルを使って SEIL にログインするための設定を紹介します。

記事一覧

SSH サーバの有効化

以下は、SEIL の初期設定から sshd 機能の部分だけを取り出したものです(*1)。

# show config sshd
sshd hostkey rsa1 none
sshd hostkey rsa auto
sshd hostkey dsa auto
sshd disable
#

この中に sshd disable とあるように、初期設定では sshd 機能は無効になっています。まずはこれを有効化してみましょう。

# sshd enable
Generating public/private rsa key pair.
Your identification has been saved.
Your public key has been saved.
The key fingerprint is:
6a:e6:2f:43:40:a7:91:53:30:08:3e:34:0b:2f:d6:c7 SEIL
Generating public/private dsa key pair.
Your identification has been saved.
Your public key has been saved.
The key fingerprint is:
1d:1f:c7:d0:8e:49:cb:42:7a:1e:2a:9e:8b:c7:e1:27 SEIL
#

SSH のホスト鍵が自動生成され、これで SEIL に SSH でログインできるようになりました。試しに、近くのホストからログインしてみてください。

% ssh admin@192.168.0.1
The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established.
RSA key fingerprint is 6a:e6:2f:43:40:a7:91:53:30:08:3e:34:0b:2f:d6:c7.
Are you sure you want to continue connecting (yes/no)? (fingerprintを確認した上でyesと入力)
Warning: Permanently added '192.168.0.1' (RSA) to the list of known hosts.
admin@192.168.0.1's password:  (パスワードを入力)
Last login: Tue Jun 14 06:38:08 2011 from 192.168.0.2 on ttyp4
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

SEIL# q
Connection to 192.168.0.1 closed.
%

はい、無事ログインできました。簡単ですね。

もしログインできない場合は、SSH クライアントのプロトコルバージョンの指定を見直してみてください。上記の設定では、SEIL は SSH プロトコルバージョン2のみ受け付けます。お手元の SSH クライアントがプロトコルバージョン1しかサポートしていない場合は... 他のクライアントへの乗り換えをお薦めしますが :) 、このまま試すには

# sshd hostkey rsa1 auto

を入力して rsa1 のホスト鍵を追加で生成してから再度試してみてください。プロトコルバージョン1でもつながるようになります。

ホスト鍵の自動生成

さきほど、sshd enable コマンドを一行入力しただけでメッセージが何行も出力されました。これは SSH のホスト鍵を生成した旨を報告するメッセージです。はじめに戻って SEIL の初期設定を見てみてください。中に、

sshd hostkey rsa auto
sshd hostkey dsa auto

という二行があります。このようにホスト鍵(hostkey)が auto に設定されていると、次に sshd 機能が有効になったときにホスト鍵が SEIL によって自動的に生成されます。SEIL がサポートしている SSH のホスト鍵には rsa1, rsa, dsa の3種類があります。今回は rsa1 鍵については sshd hostkey rsa1 none と none が指定されていたため、rsa と dsa の鍵のみが生成されました。

SEIL のコンフィグ体系では、機能を有効化しただけでその設定が自動的に生成されるようなものは他に例がありませんが、SSH のホスト鍵に関しては

ということから例外的な扱いをしています。

ホスト鍵とプロトコルバージョンの関係

一般的に使われている SSH プロトコルのバージョンは 1 と 2 の二種類です(*2)。SEIL もプロトコルバージョン1とバージョン2の両方をサポートしています。しかし、プロトコルバージョン2での接続は許可するがプロトコルバージョン1での接続は拒否したいというケースもあるでしょう。以下、sshd 機能で受け付けるプロトコルバージョンを指定する方法を解説します。

SEIL の sshd 機能の設定では、プロトコルバージョンは直接指定するのではなく対応する鍵の有無で制御します。プロトコルバージョン1が rsa1 鍵に、プロトコルバージョン2が rsa 鍵と dsa 鍵に対応します。

プロトコル ホスト鍵
バージョン1 rsa1
バージョン2 rsa, dsa

さて、SEIL の sshd の初期設定をもう一度見てみましょう。

sshd hostkey rsa1 none
sshd hostkey rsa auto
sshd hostkey dsa auto

この状態で sshd 機能を有効にすると、

となります。ここから追加でプロトコルバージョン1も有効にしたい場合は

# sshd hostkey rsa1 auto

を実行して、rsa1 鍵を追加で生成してください。すると rsa1, rsa, dsa のすべてのホスト鍵が設定されているので、プロトコルバージョン1とプロトコルバージョン2のどちらでもログインできる状態になります。

プロトコルバージョン1を再度無効にしたい場合は rsa1 鍵に none を指定して鍵を削除してください。コマンドとしては、

# sshd hostkey rsa1 none

となります。

プロトコルバージョン2は、rsa 鍵または dsa 鍵のどちらか一方でも設定されていれば有効になります。プロトコルバージョン2を完全に禁止したい場合は、rsa 鍵と dsa 鍵の両方を削除してください。

# sshd hostkey rsa none
# sshd hostkey dsa none

なお rsa1, rsa, dsa すべての鍵を削除してしまうと SSH プロトコルがまったく使えなくなりますのでご注意ください。

公開鍵認証でログインする

SSH プロトコルを使うメリットの一つとして「公開鍵認証が使える」という点が挙げられます。SEIL も SSH の公開鍵認証をサポートしていますので、設定してみましょう。

ログイン用の SSH 公開鍵は sshd authorized-key コマンドで設定します。書式は以下の通りです:

sshd authorized-key <account> add <key_name> <algorithm> <public_key>

ここで <account> にはログインしたいアカウントによって admin または user を指定します。<key_name> は鍵の名前です。SEIL のコンフィグ上で複数の鍵を区別する以上の意味はありませんので、好きな文字列を指定してください。<algorithm> と <public_key> については以下の例の中で説明します。

さて、まずは SEIL にログインするための SSH の秘密鍵/公開鍵ペアを用意してください。公開鍵は

という二つの条件を満たす必要があります。今回は SSH クライアントとしてTeraTerm を使いつつ(*4)、新規に鍵を生成してそれを SEIL に登録してみます。

TeraTerm では、鍵の生成はかんたんです。TeraTerm を起動したら、いったん接続先入力ウィンドウを閉じて、メニューバーの「設定」から「SSH鍵生成」を選択してください。

すると鍵生成ウィンドウが表れるので右上の「生成」ボタンを押して鍵を生成します。「鍵の種類」は "RSA"、「ビット数」は "2048" と、デフォルトのままで構いません。

PC の性能にもよりますが、数秒程度で秘密鍵と公開鍵のペアが生成されます。適当なパスフレーズをつけつつ、「公開鍵の保存」で公開鍵を、「秘密鍵の保存」で秘密鍵をそれぞれ保存してください。

次は、いま作成した公開鍵を SEIL に登録してみます。公開鍵は長いので、コピーペーストしましょう。保存した公開鍵ファイルをメモ帳などで開いてみてください。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDA6PASmv1jC7zdC7SFFhMMdiu6dqnimHZaFsYWHi2p
rLdtNMtxlKmfMnYTzk//soC17PCzkYHzcd5y1eNthegVqDiqZbC/jir3rb4CQ0/VoOaW39eN/Lh0TI2f
B+P80wD0A95ztreCxzfDTHFPp8BJwgRawNt7HWYgzo26K1c9WxaqdpUoibkOq9OFWEhjCBUE00Cx9bTy
GR9Xhabw4YDjqwDTQeIsQZRLuwhQW2CJnf1oUFPQ8gOJoW4sWnFzogVQRtrVkrHN5kgVQg9oifLD5tzg
MLj4FeJBQ2b4CI2TcIsKgTwmsbEr/MD6i8/2Y/syx2gYcuEHYPUQrIMqnjUd tsahara@Ulthar

上記のような内容が表示されるはずです。いちばん最後の "tsahara@Ulthar" の部分はコメント欄ですので、その直前までをマウスで選択、コピーしてください。そして、SEIL にログインして sshd authorized-key コマンドを途中まで入力し、

Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
login: admin
Password: (パスワード)
Last login: Tue Jun 14 09:14:06 2011 from 192.168.0.2 on ttyp5
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

SEIL# sshd authorized-key admin add HOGE (ここまで入力してEnterは押さない)

ここで公開鍵の内容をペーストします。

SEIL# sshd authorized-key admin add HOGE ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD
A6PASmv1jC7zdC7SFFhMMdiu6dqnimHZaFsYWHi2prLdtNMtxlKmfMnYTzk//soC17PCzkYHzcd5y1eN
thegVqDiqZbC/jir3rb4CQ0/VoOaW39eN/Lh0TI2fB+P80wD0A95ztreCxzfDTHFPp8BJwgRawNt7HWY
gzo26K1c9WxaqdpUoibkOq9OFWEhjCBUE00Cx9bTyGR9Xhabw4YDjqwDTQeIsQZRLuwhQW2CJnf1oUFP
Q8gOJoW4sWnFzogVQRtrVkrHN5kgVQg9oifLD5tzgMLj4FeJBQ2b4CI2TcIsKgTwmsbEr/MD6i8/2Y/s
yx2gYcuEHYPUQrIMqnjUd (ここでEnter)
SEIL#

これで登録ができました。さっそく公開鍵認証でのログインを試してみましょう。TeraTerm で公開鍵認証を使う場合は、途中まではパスワード認証と同様に進め、SSH 認証ウィンドウで

としてください。

SSH の公開鍵認証には、パスワードを回線上に流さなくて済むという安全性の向上以外にも、認証エージェントを使うとパスフレーズを毎回入力しなくて済むといった利便性の向上のメリットもあります。ぜひお試しください。

TELNET の無効化

最後に、SSH が使えるようになったので TELNET は止めてしまいましょう。

# telnetd disable

以上、本日は SSH プロトコルを使って SEIL にログインするための設定を紹介しました。

*1: 古いファームウェアでは、rsa1 が auto で、rsa と dsa が none となっていました。以降の説明は適宜読み換えてください。

*2: プロトコルバージョン2が登場してから既に10年が経過し、そろそろプロトコルバージョン1は役目を終えたと考えて良いでしょう。プロトコルバージョン1は安全性に懸念があるため、プロトコルバージョン1しかサポートしていないクライアントを捨てられないなど特別な理由がない限りは、プロトコルバージョン2の利用をお薦めします。

*3: この制約のため、SEILではプロトコルバージョン1の公開鍵認証は使えません。

*4: 多くの Unix 系 OS では、シェル上で ssh-keygen コマンドを実行するだけで鍵が作成できます。