More from: FTP

”ftp”が無い・・・

仕事場の古いサーバーの一部が動かなくなり用意されていた新しいサーバーに機能を移したのが先月のこと。
OS(Linux)のディストリビューションが大幅に変更され、それまで使っていたftpコマンドが使えなくなっていた。
当初はそれでも運用していたのだけど、ユーザーから「他所から定期的に受信していたファイルが来なくなった」との連絡を受けた。
そう言えば壊れたサーバーの一つが特定のftpサーバーからcrontabでファイルをgetしていたのだった。
その自動受信用のスクリプトが失われたので一から作り直す必要があった。
そんなに難しいスクリプトでは無いので、ftpサーバーのログイン情報を貰って先ずはftpコマンドでログイン・・・と思ったらftpコマンドが無いorz。
セキュリティの関係でftpクライアントがインストールされておらず、使えるのはsftpのみ(汗)。
これでも自動化は出来るだろうと思っていたが、なかなかうまくいかない。
理由はログインの自動化がどうしても出来なかったため。
sshpass
とかを使ってもうまくログインできずファイルのgetが出来ない。
結局のところsftpでの運用は諦めてlftpをインストールして運用することにした。

#yum install lftp

でインストールし、簡単なスクリプトを書いて試験をしたところ無事に目的の動作をさせることが出来た。
lftpでログインからファイル転送・ログアウトまでを自動で行うには下記のように書けば出来た。

#lftp << EOF >open -u ”ユーザー名”,”パスワード” ftpサーバー名
>”実際に行ないたい動作を示すコマンド”例:cdやget/put等
>bye
>EOF

もしくは上のopen以降byeまでをファイルに書き、
#lftp -f ”ファイル名”
でも可能。

bash下で実行させるには実行スクリプトとして
#!/bin/bash
/usr/bin/lftp << EOF open -u ”ユーザー名”,”パスワード” ftpサーバー名 ”実際に行ないたい動作を示すコマンド”例:cdやget等 bye EOF もしくは #!/bin/bash /usr/bin/lftp -f ”ファイル名” としてcrontabに登録すれば指定した時刻もしくは時間間隔での自動実行が可能となる。 ただし!どちらもサーバーへのログイン情報をプレインテキストで書くので、ファイルのアクセス権をしっかり設定しないとセキュリティ的に問題が出てくるので注意! 出来ればスクリプトの所有者をrootにしてファイルパーミッションを700にしておくのが良いかと。 さらにスクリプト名の先頭を.(ドット)にして隠しファイルにするという手もあるな。

←クリックしてくれると嬉しいです。

←クリックしてくれると嬉しいです。

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クライアントを使う必要が無くなって少しは省力化出来ることになった。

←クリックしてくれると嬉しいです。

ftp復活!

昨日現場に設置したWindows2000Serverのサーバーでftpサーバーの設定が不十分で機器からのデータを受け取れないのはなんとか解消。
現場に行くつもりでいたけど、その際にリモートデスクトップ接続も可能なようにしようといろいろ調べていたところ、昨日は駄目だったリモートデスクトップ接続が出来てしまった。
どうも昨日はなんらかのオペミスで接続出来なかったものと思われる(汗)。
繋がってさえしまえば現場に行かなくても設定は可能なので、ftpサーバーの設定を済ませ現場の人に試して貰ったところ機器からのデータの転送が上手くいったのでこれで解決。
いや、ちょっと焦ったな(汗)。

←クリックしてくれると嬉しいです。

またまたgssftpの設定(汗)

またまた現場のサーバーにてftpサーバーを動作させる必要が出来た。
まずは明日行く福岡の現場にあるWindowsサーバーでは既にftpサーバーを動作させていると思いこんでいたら、実は動作しておらず接続拒否をされてしまう。
そこでIISマネージャーから設定しようとしたら、IISそのものが動作していない・・・
仕方が無いのでIISも含めてftpサーバーの設定を行った。

もう一か所はLinuxサーバーでパッケージとしてはgssftpなので、/etc/xinetd.d/gssftpファイルを編集して最後の行の
disable = no

disable = yes
に書き換えてxinetdを再起動・・・で済む筈が、これだけではユーザー認証で弾かれてしまうので、先月二十日に書いた記事「gssftpの設定」を参考にさらに2行前の
server_args = -l -a

server_args = -l
に書き換えてxinetdを再起動。
これで通常通りにログインが可能になった。

←クリックしてくれると嬉しいです。

ftp接続でのpassive modeの切り方

ftpを使ってのデータのやりとりで、ファイアーウォール等では20番及び21番ポートを開けているにもかかわらず、何故かデータの送受信が出来ないことがある。
最初の接続及びユーザー名を使っての認証までは行えるのに、データを送る(もしくは受け取る)操作(getもしくはput)をしても
ftp: connect: Connection timed out
と出てしまい送受信が出来ない。
こんな時はPassive Modeになっているのではないだろうか?
実際私も職場と現場のサーバー同士でデータの送受信を行おうとして上手くいかなかったことがあり、そういう時は決まってPassive Modeになっていた。
Passive Modeで送受信する時は使われるポートがその時の環境で変化するために、場合によってはファイアーウォール等で閉じてあるポートを使うことになり、当然ながらパケットが通らずにタイムアウトを起こすことになる。
#Passive Modeの場合はlsコマンド等の結果が返ってくるポートも不定なので同様にタイムアウトを起こしてしまう。
この場合はPassive Modeをオフにすることでftpクライアントはデータ転送に20番ポートのみを使うようになるので、問題無くデータを送受信できるようになる。
Linux標準のftpクライアントでは
ftp>Passive off
としてやることでPassive Modeをオフにすることが出来る。
Windows用のクライアントソフトの場合はソフトにより設定の方法が異なるので、ここでは書かないけど、大抵はPassive Modeをオフにすることが出来る筈(Windows7のコマンドプロンプトで使えるftpクライアントではpassiveコマンドが無くて設定できなかった)。
接続もログインも出来るのにデータの送受信でタイムアウトになる場合はお試しあれ。

←クリックしてくれると嬉しいです。

やはりftpは速かった

先日FAX機の試験を実施した際に公衆回線を利用してVPN接続したサーバにsambaで接続してファイルをアップロードする試験は出来たが、ftp接続の試験は出来なかった。
その後ルーターの設定を変更して貰いftpでのアップロードが可能になったので、あらためて試験を実施した。
前回とは送る原稿が異なった状態での試験となったので、sambaでの接続試験も再度行った。

A4の現行10枚をモノクロでスキャンしたデータを送った時の所要時間は、sambaの時が17秒少々でftpでは13秒程度だった。
現在使用中のFAX機でローカルネットワーク内にあるWindowsサーバーに送った時が13秒弱なので、ftpではそれと殆ど同じということで、これなら現在と同程度のパフォーマンスと言えるかと。
ということで事前に予想していたようにftp接続で送信するほうが速かったので、実際に導入したら基本はftp接続となりそうだ。

←クリックしてくれると嬉しいです。

「FTPで接続出来るようにしました」

先だって現場の機器から本社のサーバにFTPでデータをアップロードする試験をした。
そのため事前にルーターの設定変更を依頼しておいたのだが、試験時に何故かFTPでの接続が出来ない。
現場で試験した機器はPCでは無いので細かいエラー内容等が判らず、PCを使って試したところFTPサーバが全く返答を返さない状況。
サーバのプロセスを見てもftpデーモンがたちあがる気配が無いので、パケットがサーバに到達していない可能性が高くなった。
確認のためにルーターの設定変更をお願いした業者さんに問い合わせたところ、なんと設定変更作業をしていないとのこと・・・
試験実施の時間を勘違いしていたようで、こちらは午後から試験をするので午前中までに変更作業をしておいて欲しいとお願いしたのを、何故か試験実施は夜だと思い込んでいたとのこと。
悪いことに担当者が別の現場にいるとかですぐには対応できないとのこと。
それでも無理を言ってなんとか設定を変更して貰ったところFTPサーバへの接続(ログイン)までは出来るようになった。
これで大丈夫だと思って中断していた試験を再開したが、今度はデータが送られずにタイムアウトになってしまう。
FTPサーバにファイルは出来るのだけど、いつまで待ってもファイル容量が0バイトのまま。
何度やっても同じで試験に使える時間も無くなったために一度試験を終了し、後日再度行うことにして試験用の機器を手配してくれた業者さんには一旦引き上げていただくことにした。
原因はftpで使用するTCPポートの内コントロール用の21番ポートしか開けておらず、データ転送用の20番ポートは閉じたままだったこと。
これだと確かに接続は出来るけど、実際のデータ転送が出来ないので意味が無い。
こんなんで「FTPで接続出来るようにしました」と言われてもなぁ、、、ただ接続出来れば良いってもんじゃ無いだろうに。
この業者さんは最近単純な作業ミスが多いので営業担当者の方にその旨苦情を入れておいた。
結構長い付き合いになったので甘えているんだろうか?
自分はそうならないように気をつけなければ!

←クリックしてくれると嬉しいです。

意外と速く転送できた

移行用にlhaで固めたデータは結局約1.8GBの大きさになった。
元が2.8GB程度だったのでおよそ1GBほど小さくなったわけだ。
このファイルをftpで転送したのだが、1時間もかからず(実際には43分ほどで)転送が終わった。
ざっと計算してみたところ6Mb/Sec弱の速度ということになった。
もっとかかるかと思っていたが意外と早く終わったので一安心かな?

←クリックしてくれると嬉しいです。

Windowsからftpサーバへの接続メモ

先日から「(Windows標準の)エクスプローラーから簡単にファイルサーバにアクセスしたい。」という要望を実現すべくいろいろ試行錯誤していたのでその時のメモ。

WindowsXP以降のOSには標準でftpクライアントが実装されたので、それを使ってftpサーバに接続してファイルのアップロードやダウンロードが出来るようになった。
エクスプローラーのアドレスバーに「ftp://(サーバのアドレス)/」と入れればanonymous(匿名)ユーザーでのアクセスを許可しているサーバならログイン可能だ。
接続できない場合はanonymousログインを許可していないかサーバ側の設定が間違っていることになる。

今回使用したサーバはvsftpdを利用していたので、以下はvsftpd用の設定メモ。
anonymousユーザーのホームディレクトリ(ftp rootになる)はデフォルトで/var/ftp/なので、これを他のディレクトリにしたければ/etc/passwdファイル中のftpユーザーのエントリを書き換えてvsftpdを再起動すれば良い(kill -HUP 1を実行する必要もあるか)。
ここで気をつけなくてはならないのは、ホームディレクトリに一般ユーザーの書き込み許可があるとvsftpdはログインを許可しないので、エクスプローラーからの接続が出来ない。
Linuxから接続しようとすると、
500 OOPS: vsftpd: refusing to run with writable anonymous root
のエラーメッセージが出て接続が拒否される。
なので、ホームディレクトリのパーミッションは755もしくは775にして置く必要があり、ファイルのアップロードを許可するには書き込み可能なサブディレクトリを作成しておく必要がある。
当初はこのことに気付かず実際にアクセスさせたいディレクトリをホームディレクトリに変更したところログインできなくなって焦った(というか変更は出来ないものかと思った)。

なお、接続時にユーザー名を指定して接続する場合にはその必要は無い。
接続時にユーザー名を指定するにはアドレスバーに「ftp://ユーザー名@サーバーのアドレス」と入力し、パスワード入力を促すダイアログボックスが表示されるので、そこでパスワードを入力すれば(そしてパスワードが正しければ)サーバへ接続できる。
下はパスワード入力のダイアログボックス。

ftp接続時のダイアログボックス

ftp接続時のダイアログボックス。


2回目以降も同じユーザー名とパスワードで接続するなら下の「パスワードを保存する」にチェックを入れておけば入力の手間が省ける。

とりあえずここまでやって目的のサーバーに接続できるようにはなった。
今現在少々悩んでいるのがファイル名の文字コードで、sambaユーザーがアップロードした日本語ファイル名がことごとく文字化けして全く意味不明だということ。
読めないだけならまだしも、フォルダ名が日本語の場合にフォルダの中は見れてもファイルを開こうとするとアクセス出来ないのは困る。
この文字コードを統一したいのだけれど、まだそこまでは調べが付いていないので現在も調査中。
まぁ、sambaとftpを別個に運用することも出来るので、どうしても無理なら諦めることにしよう。

←クリックしてくれると嬉しいです。