[ PC系セットアップ覚書 Top]

PC系セットアップ覚書

2011年まで「俺的な非 UN*X 環境をめざして」という題でしたが、 「UNIX系」と「非UNIX系」の区別がだんだん難しくなってきましたので、 あれこれ区別しないことにしました(^_^;


[前] USBメモリが壊れた 2010/10a

FTP はもう終わりだ 2010/06a

‥ということなんでしょうか。

Ninja Toolsgozaru.jp 上に ある自分のアカウントにFTPログインしようとしたら拒絶されます。何?! と思って見てみたところ、 「ファイルのアップロード」の際の FTP アクセスは完全に排除、FTPS でしかアクセスできなくしたから ヨロシクね、というかなり思い切ったセキュリティ対策を取ったみたいですね。 フリーなサービスだからできる、非常に大胆なサービス内容の変更といえます(^o^;
まあ、それだけセキュリティ意識が高いということなんでしょうけど、だとしたら何故 FTPSパスワード変更のページなどはHTTPSとかじゃなくて 素のHTTPなのかという気もしないこともないですが、それはご愛嬌‥

さて。私は このサイトにファイルを「アップロード」する際には、 専用のバッチファイルを使うようにしています。そのバッチファイルをダブルクリックすると バッチファイルが勝手に(?)サーバにアクセスしてファイル群をサーバにPUTするので、 私は一連のファイル転送が終わるまで ぼけーっと待ってるだけ、という感じの利用法です。 そして、それを実現するため、FTP アクセスにはコマンドライン(CUI)でサイレントに実行する FTPコマンド(Windows標準ではないものをどこかから拾ってきたもの)を愛用していたわけです。

なので、これまで FTP クライアントの役割をしていたCUIのコマンドを FTPS 対応のものに入れ替えれば もう話は終わりじゃん、と思いましたので、調べてみたところ‥ CUIのレベルでFTPSクライアントになってくれるコマンドがなかなか見当たりません。 唯一見つけることのできたのは、GUIのレベルではこれまでかなり使用経験のある WinSCP。 調べてみると、バージョン 4.2beta から FTPS (FTP over TLS/SSL) への 対応をスタートしてるみたいですね。まさかこんな用途で WinSCP を使うことになろうとは

そこで WinSCP 4.2.7 Portable executable となってるやつをダウンロード、展開してみます。 展開すると WinSCP.com と WinSCP.exe という、それっぽい名前のコマンドが二つあります。 どうやら EXE ファイルのほうが本体で、コマンドラインで使うときは COM ファイルのほうを起動させると ウィンドウが出ないような細工をしてEXEファイルのほうを呼び出してくれる、という 感じになってるみたいです。

ということで。 さっそく WinSCP.com を使って、gozaru.jp のサーバにアクセスしてみましょう。 多少の試行錯誤の結果、以下のようにすれば サーバに接続できることを確認しました。

WinSCP.com ftps://example.gozaru.jp:PASSWORD@example.gozaru.jp:21/test/ /passive /explicittls

上記のようなコマンドを入力すると、下記のようなメッセージが出て (手入力なので一部間違ってるかも)

Connecting to example.gozaru.jp ...
Connected with example.gozaru.jp, negotiating SSL connection...
SSL connection established. Waiting for welcome message...
Connected
Starting the session...
Reading remote directory...
Session started.
Active session: [1] example.gozaru.jp@example.gozaru.jp
winscp>
ここで "winscp>" に対して "ls" と入力した結果、 ファイルの一覧が出力されればアクセスは成功です。‥‥やった!
んで、接続の確認ができたら、サーバとの接続を一旦切ります。 "winscp>" に対して "exit" と入力すれば サーバとの接続は切れます。

こうして WinSCP でサーバへのアクセスが可能なことを確認したら、 サーバへのアクセス、またファイルの転送を自動的に行うため、 WinSCP が勝手に行うべき動作の内容をまとめた「スクリプト」なるものを 用意してやります。ここでは、 bin\file-send.winscp という名前の、 以下のようなスクリプトを用意しました。

open ftps://example.gozaru.jp:PASSWORD@example.gozaru.jp:21/test/ -passive -explicittls
lcd ".\spool"
option confirm off
synchronize remote
close
exit
念のために言っておくと、.\spool という名前のフォルダの下にアップロードしたい ファイルが置かれていて、それらを全部問答無用でサーバ側に送りつける、ということを させようとしてます。(それなので、ファイルの転送の前に一旦こちら側の作業場所を lcd コマンドによって spool に移動し、また「ファイル上書きする?」というウザい(?) メッセージを消すため option confirm をオフに設定したうえで、synchronize remote コマンドを用いて こっち側のファイル群を 強制的に全部サーバ側に送りつけています。)

上のようなスクリプト(bin\file-send.winscp)を書いたら、あとは WinSCP がこのスクリプトを勝手に読み込んで勝手にその内容を実行してくれるような 仕組みを整えます。幸いなことに私は すでにサーバへのアクセス・ファイル転送を勝手に 行わせるバッチファイルを用意してありましたので、そのバッチファイルのうち、 サーバへのアクセス・ファイル転送を行う部分だけを以下のように書き換えてやるだけで 準備OKとなりました。

WinSCP.com /script=.\bin\file-send.winscp
実際にバッチファイルをダブルクリックして動作確認してみます ‥‥ おおっ! うまくいくッッッ(^o^)v

ただ、上のスクリプトでは、ユーザ名とパスワードとサーバ名が全部セットで並んで 書かれている点がちょっと無用心ですね。何とかならないかなあ‥と思って、とりあえず スクリプトのサーバへのアクセス部分、open で始まる行を 以下のように書き直してみました。

open ftps://example.gozaru.jp:%PassWd%@example.gozaru.jp:21/test/ -passive -explicittls
最初はパスワードを直接書いていた部分に、かわりに "%PassWd%" と "%" で 囲んだ文字列を記入しておきます。こうすると、Windows (というかDOS)の環境変数、この場合は 環境変数 PassWd を参照してその値をその "%PassWd%" と置き換えてくれるようになります。 今回の場合は、スクリプトをこんな感じに書いておいて、あとはこのスクリプトを呼び出すバッチファイルの ほうに以下のように:
set PassWd=PASSWORD
WinSCP.com /script=.\bin\file-send.winscp
こんな感じに環境変数 PassWd に値をセットする行を書いておけば、 まあ、同じファイルの同じ行にユーザ名と、パスワードと、 サーバ名を列挙するよりはるかにセキュリティ的にはマシな状態になるかと思います。 (人間に見られたら一発でバレますけど、パスワード盗みウィルスにとっては 割と 難易度が高そうに思うのですが)

[後日談] Ninja のサーバの FTPS 制限の話、トラブル頻発で結局ウヤムヤに なっちゃってますね。たしかに、上のスクリプトでの接続も実際に運用開始してみると うまくいったり、全然ダメだったり、という感じで正直使い物にならない感じです。 何なんだかなー。

[後日談の後日談]



[次] US/JPキーボード切り替え 2010/05a