Windowsの標準ftpクライアントコマンドでは、PASVモード(パッシブモード)が使用できず、アクティブモードしか使えません。
しかし、一般的にインターネット越しのFTPサーバーはパッシブモードが多いです。
Windowsでパッシブモードが使用できるジョブ化できるftpクライアントコマンドは無いのでしょうか?
レジュメ
FTPのアクティブモードとパッシブモードの違い
FTPのアクティブモードは、クライアントのコマンドは、上記「制御系」のTCPコネクションでやり取りしますが、データ転送(または返信)は上記「転送系」のTCPコネクションでやり取りします。
ここで、アクティブモードでは「転送系」の接続はFTPサーバーからクライアントPCに接続してくるためクライアント側のファイアウォールが通信をブロックしてしまうケースがあります。
FTPのパッシブモードは、クライアントのコマンドは、上記「制御系」のTCPコネクションでやり取りしますが、データ転送(または返信)は上記「転送系」のTCPコネクションでやり取りします。
ここで、パッシブモードでは「転送系」の接続はクライアントPCからFTPサーバーに接続するところがアクティブモードと異なります。
結論、フリーソフトのWinSCPでコマンド実行もFTPスクリプト化も可能です
残念ながらWindows標準の機能では実装出来ないのですが、インフラSEには比較的有名なフリーソフト「WinSCP」でGUIだけでなくCUIコマンド実行も出来ます。
「WinSCP.com」でCUIコマンド操作が可能です。
WinSCP.comのFTPコマンドも標準FTPコマンドに近しく親しみやすいUI
以下、WinSCP.comのhelpを打った結果です。
- call 任意のリモート コマンドを実行
- cd リモート ディレクトリの変更
- checksum リモート ファイルのチェックサムを計算する
- chmod リモート ファイルの権限を変更
- close セッションを閉じる
- cp リモート ファイルを複製
- echo その引数をメッセージとして表示します
- exit すべてのセッションを閉じプログラムを終了する
- get リモートからローカルにファイルをダウンロード
- help ヘルプを表示
- keepuptodate ローカル ディレクトリの変更をリモートに反映
- lcd ローカル ディレクトリを変更
- lls ローカル ディレクトリの内容を表示
- ln リモートにシンボリックリンクを作成
- lpwd ローカル ディレクトリの表示
- ls リモート ディレクトリの内容を表示
- mkdir リモート ディレクトリを作成
- mv リモート ファイルを削除または名前変更
- open サーバに接続
- option スクリプトオプションの値を設定/表示
- put ローカルからリモートにファイルをアップロード
- pwd リモート ディレクトリの表示
- rm リモート ファイルを削除
- rmdir リモート ディレクトリを削除
- session 接続しているセッションの表示またはアクティブなセッションの選択
- stat リモート ファイルの属性を表示
- synchronize リモートとローカルのディレクトリを同期
その他にも、helpには表示がありませんでしたが「mget」も使用できました。
こちらのコマンドでFTPスクリプトを書き、WinSCP.comの引数指定することで、FTPジョブの自動化も可能です。