出先からファイルが欲しいなぁ、なんてことを感じた人は割と多いかと思います。
そんなときのために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で設定するのが滅茶苦茶面倒くさくなるので我慢しましょう。
ひとまず
と打つと現在のディレクトリが表示されます。そんな感じで続けてユーザーディレクトリに移動するためのコマンドを打ちます。
次に
と打つと何もないことが分かると思いますので、
mkdir /home/username/ ※もちろん自分がログインさせたいユーザー名で作る
|
私の場合はアカウント名がyuhなのでmkdir /home/yuh と打っています。
こんな感じで続けていきます。
cd /home/username/ ※もちろん先ほど作成したユーザー名で入力
mkdir ./.ssh/
cd ./.ssh/
|
注意!
|