Modified on 23.Apr 2005
How to build a simple OpenSSH Server in Windows
    
    
    
出先からファイルが欲しいなぁ、なんてことを感じた人は割と多いかと思います。
そんなときのためにFTPを動かしても良いのですが、もうちっとSecureな方法がないかな、なんてことを
感じている人も割と多いかと思います。

そこでSSHの出番ですよ。

SSHとSCPを使えばリモート管理はほぼ全て必要なことは満たせるはず。
ということでWindowsでSSHサーバを構築しようと考えるも、フリーで簡単で日本語も問題ナッシン、
なんてのはいまだにないのが現状です。
なんか業務用のばっかだし、気軽に使えそうなパッケージソフトつったらSSH Tectia Server
なんてのがあるんだけど、サーバー版が1ライセンスで10万円近くなので、貧しい私では手が出ません。
仕方がないのでいくつかフリーの環境を試してみた結果が下記の通り。

Cygwin + Cygwin JE (1)メリット
日本語の情報が多い、日本語ファイルが扱える
(2)デメリット
セットアップが面倒、不要な機能の見極めが難しい、削っても巨大、 シェルがUnix系になるので学習が必要
OpenSSH for Windows (1)メリット
セットアップが簡単、シェルに手慣れたコマンドプロンプト
(2)デメリット
日本語ファイルが扱えない、日本語の情報が皆無に近い。
Cygwin + Cygwin JE ちなみにCygwinとはWindowsの中にUnixライクな環境を作り上げるツールで、いまいち使い途が 分からないツールかもしれませんが、Unix向けに開発されているOpenSSHというアプリケーションを 動かすためには必須となります。 Cygwin JEはそのCygwinのパッケージを有志が日本語化しているプロジェクトのようです。 余談ですがCygwinを使用し、Unixライクなシェルスクリプトでサーバーの管理作業を目論む、 というのは正しい使い方かどうか分かりませんが、WSHという手軽で便利な選択肢があるので、 これを使おうとするとWindows管理者としてダメ扱いされる可能性もあります。 OpenSSH for Windows 上記のCygwinのパッケージから無駄なものを極限まで省き(省きすぎ)、コマンドプロンプトを シェルとするため一部をモディファイし、それをインストーラに詰めて配布しているフリーの アプリケーションです。導入が簡単なのは良いのですが(英語だけどね)、コマンドプロンプトを シェルとしている弊害なのか、chmodやSCPで日本語のファイルが扱えません。 このままでは私の目的を考えると話になりません。 余談ですが/binにあるswitch.cの内容と、付属のmkpasswdコマンドを使用してみると分かるのですが、 シェルコマンドの実行に当たってはswitch.exeというファイルが、sh.exeとcmd.exeの仲立ちをしている ようです。ここら辺に日本語を扱うためのヒントがありそうなのですが、私には解決が無理でした。 とまあ比べて考えてどちらが現実的か、と考えるとそれは日本語ファイルが扱えるCygwin環境に 軍配が上がります。この際、基本コマンドがUnix系になるのはあきらめるとして(覚えるのが面倒な だけで難しいわけではない)。しかしパッケージが巨大だし、setup.exeがお馬鹿だし、なんだかなぁ・・・。 ってことで、折衷案としてOpenSSH for Windowsを入れて、それから必要なCygwinのコマンドなりを 付与していくことにしました。 そしてパスワード認証は取らず、よりSecureなSSH2による鍵交換のパスフレーズ認証を目標とします。 注意! インストール手順などについては他に詳しいページが大量にありますので、詳細はそちらを参照してください。 本稿の動作確認に於いてはWindows2000Server(ADドメインコントローラ)とWindowsXPのPCを使用しています。 ◎用意するもの LAN環境、WindowsのPC2台(SSHサーバ用と作業用) ※SSHサーバ用のPCはドメインコントローラだったりすると、一部の手順が上手く行かない可能性があります。 ◎手順 1.Cygwinを詰め込む 作業用に用意したPCにCygwinを詰め込みます。 公式ページからsetup.exeをダウンロードして、面倒なのでフルパッケージをインストールで良いでしょう。 2.Cygwin JEを適用 Cygwinのsetup.exeでhttp://cygwin-je.sourceforge.jp/cygwin_je/を指定し、 [keep]にしてから対象パッケージを指定しつつ日本語化パッケージを入れます。 どれが日本語化しているのかよく分からないと思いますので、先ほどのURLからreleaseディレクトリの中を見つつ、 setup.iniからカテゴリを検索すれば大体分かるはずです。 なお少なくとも今回の使い方では、bashの日本語化版だけでも適用しておかないと意味がありません。 3.Cygwinの初期設定 とりあえずデスクトップにできたCygwinのアイコンから、起動の確認をして問題ないようならば初期設定に移ります。 別に手動で設定しても良いのですが、書くのが面倒くさいので偉人が作ってくれたスクリプトを使うことにします。 http://shooting-star.myhome.cx/cygwin/1st-setting.html ↑のページに行くと"cygwin-jp_based_1.5.7-rev2.tar.gz"というスクリプトが用意されていますので、 説明通りに導入してスクリプトを実行させます。 結構面倒な作業を実行してくれるので、こういうものを作ってくれた人に感謝。 ※アクセス権の設定と確認にかなり時間を取られるようです。寝る前に実行させましょう。 なお私の環境では、オプションなしのlsで日本語ディレクトリがbashで正しく表示されなかったりしたので、 .bashrcの alias ls="ls -F --color=auto --show-control-chars" の行を一番最後にしたら直りました。 4.OpenSSH for Windowsの導入 SSHサーバ用のPCで[次へ]だか[Next]だかの連打で好きなディレクトリにインストール。 5.レジストリの修正 OpenSSH for WindwosもCygwinパッケージの一種なのでCygwinと同じになりますが、マウントテーブルは 以下のレジストリキーに保存されます。 HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2 そこで/homeというキーの"native"という値にユーザーディレクトリが指定されているはずなのですが、 私の経験ではマトモに設定されていたことがないので、その部分の文字列を任意のパス (私の場合はC:\Program Files\OpenSSH\home)に変更します。 6.ファイルの入れ替え OpenSSH for Windowsのファイルは必要ないのでディレクトリだけ残し全部消すか、バックアップを取るかします。 以下はSSHサーバ用PCで最低限の作業をするために作業用PCからコピーする内容です。 (1)./binにコピー [.exe awk.exe bash.exe //当然、日本語対応版 cat.exe chmod.exe chown.exe cp.exe cygcrypt-0.dll cygcrypto-0.9.7.dll cygiconv-2.dll cygintl.dll cygintl-1.dll cygintl-2.dll cygintl-3.dll cygminires.dll cygpath.exe cygpcre.dll cygpcre-0.dll cygrunsrv.exe cygwin1.dll cygz.dll expr.exe false.exe gawk.exe grep.exe id.exe kill.exe last.exe ls.exe mkdir.exe mkgroup.exe mkpasswd.exe mount.exe mv.exe ps.exe rm.exe scp.exe sed.exe setfacl.exe sftp.exe sh.exe ssh.exe ssh-add.exe ssh-agent.exe ssh-host-config //コンフィグ用スクリプト1 ssh-keygen.exe ssh-keyscan.exe ssh-user-config //コンフィグ用スクリプト2 umount.exe uname.exe (2)/etcにコピー .bash_profile //bashが最初に読みに行くファイル .bashrc //bash基本設定 .inputrc //日本語入力用 banner.txt //認証に失敗したりすると表示されるテキスト moduli //なんだか知らない ssh_config //SSHクライアント用設定ファイル ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_key ssh_host_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub sshd_config //SSHサーバ用設定ファイル (3)/usr/sbinにコピー sftp-server.exe sshd.exe ssh-keysign.exe 7.設定ファイルの記入 説明するのが面倒なので、私の環境のを貼っておきます。 (1).bash_profile if [ -e /etc/.bashrc ] ; then source /etc/.bashrc fi if [ -e ~/.bashrc ] ; then source ~/.bashrc fi (2).inputrc #!/bin/bash set kanji-code sjis set convert-meta off set meta-flag on set input-meta on set output-meta on (3).bashrc #!/bin/bash export SHELL=/bin/bash export LANG=ja_JP.sjis export TZ=JST-09 PATH=/bin:/usr/local/bin:/usr/bin:~/bin alias la="ls -aF" alias ll="ls -l" alias ls="ls -F --color=auto --show-control-chars" 8.bashの起動 SSHサーバ用PCにて、下記のいずれかの方法によりCygwin環境にログインする (1).ショートカットから bash.exeにショートカットを作り、ショートカットのプロパティで[リンク先]に "インストールしたディレクトリ\bin\bash.exe --login -i" を記入してショートカットから起動。 (2).バッチファイルから 適当なテキストファイルを作り、bash.cmdみたいに名前を付けて編集する。 @echo off cd /d "インストールしたディレクトリ" bash --login -i 基本的にショートカットからの方法をオススメします。 9.ユーザーディレクトリの作成とコンフィグスクリプトの実行 先ほどSSHサーバ用PCにて作成したファイルを用いてbashにログインすると、変なコマンドプロンプトの画面になります。 そこでユーザーディレクトリを作成するのですが、Windows上で作らないのは、Cygwinが持つACL(アクセスコントロールリスト) に反映されないためです。後でchmodやchownで設定するのが滅茶苦茶面倒くさくなるので我慢しましょう。 ひとまず
pwd
と打つと現在のディレクトリが表示されます。そんな感じで続けてユーザーディレクトリに移動するためのコマンドを打ちます。
cd /home
次に
ls -al
と打つと何もないことが分かると思いますので、
mkdir /home/username/ ※もちろん自分がログインさせたいユーザー名で作る
私の場合はアカウント名がyuhなのでmkdir /home/yuh と打っています。 こんな感じで続けていきます。
cd /home/username/ ※もちろん先ほど作成したユーザー名で入力
mkdir ./.ssh/
cd ./.ssh/
注意!
(・ω・)ひとこと つくりかけで放置している内に内容自体が時代遅れになってしまいました。
ということでこれ以上更新しません。 2007/2/15 yuh