ftpによるファイルの自動取得

海外の現場とファイルのやり取りをするために専用のftpサーバーを立てている。
そのftpサーバーがセキュリティアップデートをしたためか、これまでアクセス出来ていたPCではログインは出来るもののファイルの取得が出来なくなったのでなんとかならないかと相談を受けた。
ftpのログを見るとログイン後のコマンドの実行に対しエラーコード”500”が返ってきている。
これはコマンドの構文が正しくない場合に出るエラーで、ユーザー自身が調べたところサーバーのアップデートでこれまで使えていたPCのクライアントソフトが発行しているコマンドを解釈出来なくなったのが原因だと判ったのでその分を変更したら500のエラーが返ってくることは無くなったとのこと。
ところが今度はエラーも返って来ずタイムアウトになるというのでログを見ると確かに”000”が返っているのでクライアントソフト側でタイムアウトと判断して切断しているようだ。
この原因はどうもデフォルトのモードがpassiveモードになり、F/Wでポートを開けていない(なのでコマンドの応答が返って来ない)かららしい。
この時点でクライアントPCからアクセスさせるのは無理となった(セキュリティ上ポートは開けたくない)。
そこで代替手段としてLinuxサーバーで自動受信をさせ、クライアントPCから見える場所にファイルを置くことにした(サーバーのあるセグメントからはpassiveモードでも通信可能)。
自動受信のために作ったスクリプトが下記。
——————————————
1 ftp -n -i <<AA (<<は本当は半角)
2 open ftpサーバー名 or IPアドレス
3 user ログインユーザー名 パスワード
4 cd /ファイルのあるディレクトリ
5 binary ←必要ならバイナリモードの指定
6 mget [a-z]*.zip
7 bye
8 AA
——————————————
先頭行でftpに渡しているオプションは
-n ログインプロンプトを出さずにログイン処理をさせる。(-n: inhibit auto-login)
-i mgetコマンドで複数ファイルのget時の”y”の入力を省略する(-i: turn off prompting during mget)。
という意味。
-n オプションを付けることでログイン時のパスワードの自動入力をさせるため3行目のuser コマンドでログインユーザー名とパスワードを送信している(生で書くのでこのファイルの管理は厳重に!)。
後は4行目で目的のファイルのあるディレクトリに移動して6行目のmgetで一括でファイルを受信させている(この場合は先頭が小文字のアルファベットで始まる全てのzipファイル)。
7行目のbyeコマンドで切断し処理終了。
このスクリプトをcronに仕込めば定期的に自動実行できるので、ユーザー自身が毎回ftpクライアントを使う必要が無くなって少しは省力化出来ることになった。

←クリックしてくれると嬉しいです。
【広告】

One comment to this article

コメントを残す