OS構成としては、サーバー側がCentOS4、クライアント側がWindows98/Me/2000/Xp、サーバー側の文字セットとして標準的なUTF-8を想定し、フリーのソフトウェアで環境を構築するという条件で考える。
まず、必要なソフトウェアについて。
Windows 側クライアントとして、他にもあるかも知れないが見つけた範囲では、 TeraTermPro を平田豊氏が改良されたUTF-8対応版か、 Poderosa の二択である。
いろいろ試したので、他のツールについても書いておく。
・SSH SecureShell…非商用使用に限り使える無料版が存在するが、日本語非対応。現在はSSH Tectiaという後継製品となっている。
・Putty…本家は日本語非対応。日本語対応版、ごった煮版、Putty JP Xtransと、日本語化を含めた改良がされているようだ。しかし残念ながら Me ではダイアログの文字が化けてしまう。情報を頼りに、puttyjp.exe, puttyjp.lng を putty.exe, putty.lng にリネームし、putty.lng をエディタで開き [Japanese] セクションの '_FONTNAME_=MS UI Gothic' を Win98系で存在するフォント名に変えてみたがだめだった。XP の msgothic.ttc をコピーしてみたが、同名のファイルがOSに常に掴まれているため置き換えできができなかった。
・Cygwin…Windowsでクライアントを使いたいので Cygwin を導入するのは本末転倒だが、 bash で LANG=Ja_JP,UTF-8 としても無駄なようだ。
結論としては、 Poderosa がわりと良いんではなかろうか。複数の端末を同時に開けられるし、公開鍵の生成もできる。Cygwin の端末としても使える。ただし注意点が2つ。まず、 ssh2 の鍵は 2048 bit までのようだ。ssh-keygen でつくった 4096 bit の DSA 鍵は使用できなかった。Poderosa 自身の生成機能でも最大値は 2048 だ。次に、cygwin 端末として使う場合 cygwin1.dll が poderosa.exe のあるフォルダの下の Cygterm/ フォルダ内に必要だ。 c:/cygwin/bin/ にパスを切ってもよかろうが、 cygwin の他のバイナリが意図せず動作するなど副作用が嫌なので、 dll をそこに放りこんだ。
次に、sshd サーバーの設定。/etc/ssh/sshd_conf に対する初期設定からの変更点。
試行錯誤するので、最初に:
LogLevel DEBUG
としておいたおかげで、 /var/log/secure をみて、パーミッションの問題で認証失敗しているなど情報が得られた。用が済めばコメントアウトすればよい。
SSH2 のみを許可:
Protocol 2
SSH1 での RSA1 接続を禁止し、 SSH2 での RSA/DSA 接続を許可する:
RSAAuthentication no
PubkeyAuthentication yes
(コメントアウトしても動いたが、トラブルになった場合は):
AuthorizedKeysFile &h;/.ssh/authorized_keys
としておけば、接続許可したい各ユーザーの公開鍵情報一覧がどのファイルに入っているか、明示できるだろう。
rhost 関係、サーバー側の known hosts 、ホストベースでの接続を禁止:
RhostsRDSAuthentication no
HostbasedAughentication no
IgnoreUserKnownHosts yes
IgnoreRhosts yes
公開鍵認証のみ許可したいので、パスワード認証を禁止して空のパスワードでの接続も禁止:
PasswordAuthentication no
PermitEmptyPasswords no
次に、サーバーに接続したいユーザーの鍵に関する設定の例。
1. そのユーザーでサーバーにログインして、ホームディレクトリの直下に .ssh/ ディレクトリを作成して、パーミッションを 0700 にする。
2-a. クライアント側で鍵の生成が出来ない場合。(TeraTermPro の場合。)
接続したいユーザーでサーバーにログインして、
ssh-keygen -b 4096 -t dsa
などどして、公開鍵と暗号鍵をつくる。保存先は .ssh/ 内が初期位置なのでそのままでよい。パスフレーズを聞かれるので、最低6文字以上の一意の文字列を考えて入力する。空白文字などの記号も使用可能だ。クライアントからログインするときは、このパスフレーズをパスワードとしてログインすることになる。
上の例では公開鍵として id_dsa.pub が、秘密鍵として id_dsa ができる。このうち、秘密鍵はクライアント側に何らかのセキュアな手段で移動させ、公開鍵は .ssh/ ディレクトリ内に authorized_keys というファイルを作ってそこに追記する。公開鍵は1行で1ユーザー分の認証情報になっており、当該ユーザーとしてログインを許可したいユーザーの公開鍵をこのファイルに追記していく形式となる。ちなみに authorized_keys のパーミッションは 0600 となる。
2-b. クライアント側で鍵の生成が出来る場合。(Poderosa の場合。)
クライアント側で鍵を生成する。生成した公開鍵をサーバーのログイン許可したいユーザーの .ssh/ ディレクトリ内の authorized_keys というファイルに追記する。
3. ssh クライアントで接続を開始する。
・相手のホスト名は、サーバー側のホスト名または IP アドレス。
・プロトコルは SSH2 。
・ポートは SSH の 22番ポート。
・ユーザー名には、サーバー側に存在するログインしたいユーザー名(当たり前だが .ssh ディレクトリなどを作って準備したユーザーの名前だ)を入れる。
・認証方法は、「公開鍵」方式。
・パスフレーズは、鍵を生成したときに決めたものを入れる。
・鍵ファイルは、サーバーで生成しクライアント側に持ってきた(または、クライアントで生成した)鍵のうち、秘密鍵の方のファイル名を指定する。
以上で、 ssh2 で公開鍵を用いたログインができるようになる。