229 Entering Extended Passive Modeで詰まった場合

今週あたりからある目的のために某所で管理されているFTPサーバにファイルを置いたりしはじめたのですが、そのFTPサーバに対して、イントラネット的にちょっと遠いところにある検証用サーバからアクセスすると、lsコマンドの発行、putコマンドの発行などの際にタイトルにある"229 Entering Extended Passive Mode"で詰まる現象に遭遇しました。1分か2分くらい、タイムアウトが発生するまで待たされます。

これは、しばらく放置すると、こんな感じで処理が継続されていきます。

ftp> ls
229 Entering Extended Passive Mode (|||58592|)
500 Bad EPRT protocol.
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    2 0        1            4096 Jan 12  2006 bin
drwx--x--x    2 0        1            4096 Jan 12  2006 etc
drwx-wx-wx    6 0        1            8192 Jun 19 14:14 outgoing
drwxr-xr-x   56 0        3            4096 Jun 22 04:15 pub
drwxr-xr-x    3 0        1            4096 Jan 12  2006 usr
226 Directory send OK.

上記3行目の"500 Bad EPRT protocol."と4行目の"Consider using PASV"いうのが注目したいところで、要するにExtended Passive Modeとやらでアクセスを試みたけれども話が通じないので通常のPassive Modeに切り替えた、ということです。

FTPサーバは他の人が管理してるサーバで、しかも組織図的にいうと疎結合な感じのところのサーバなので、「まあそういう設定になってるのだろう」とあきらめるしかありません。

こちら(クライアント側)でExtended Passive Modeじゃなくて最初からPassive Modeでアクセスするようにすることになります。

で、これ最初は普通に/usr/bin/ftpを使ってたわけですが、調べてみると、epsv4というコマンドで、Extended Passive ModeをOFFにすることができるのが分かりました。

epsv4
Toggle the use of the extended EPSV and EPRT commands on IPv4 connections; first try EPSV / EPRT, and then PASV / PORT. This is enabled by default. If an extended command fails then this option will be temporarily disabled for the duration of the current connection, or until epsv4 is executed again.

ログインしてepsv4と叩けば、確かにlsとかputコマンドで詰まることはなくなりました。

しかし、ftp接続時に自動的にepsv4を発行してくれるようにするオプションとか、任意のftpコマンドを接続時に初期処理としてやってくれる方法だとかがありません。惜しいぃぃ!

というわけで/usr/bin/ftpには見切りを付け、もうちょっとリッチなftpクライアントを使うことにしました。適当に探したら、lftpってのが良さげだったので、これを使ってみると・・・。

最初からlftpを使っとけば無問題

lftpの場合、Extended Passive Modeで詰まるとか、そういうのが最初からなかったです。すいすい〜ですよ。

bashシェルと同じように、ディレクトリの色付とかもできてるし。

前置きが異様に長かったですがいいたいことはこれだけ黙ってlftp使っとけ。