web-dev-qa-db-ja.com

PASVコマンドの後でwget ftp接続が失敗する

1つのWebサーバー(「ソース」)から別の(「宛先」)にすべてのファイルを転送しようとすると、wgetコマンドはFTP経由で接続していますが、PASVコマンドを超えて進むことはできません。

「宛先」サーバー(共有ホスティングのLinuxボックス)へのSSH接続を使用して、wgetコマンドを実行しています。

「ソース」サーバーはMicrosoftサーバーであり、私のデスクトップ上のFTPクライアントは問題ありません。

転送を開始するために使用しているコマンドは次のとおりです。

wget -m ftp://username:'password'@sourceserver.com

ログインが成功すると、次のコマンドが発行されます。

==> SYST ... done.      ==> PWD ... done.
==> TYPE I ... done.    ==> CWD not needed.
==> ... couldn't connect to xxx.xxx.xxx.xxx port 1128: Connection timed out
Retrying.

「接続できませんでした」エラーでは、再試行するたびに、別のポート番号(21ではなく、既に正常に接続されている)を試みます。最初にエラーを書き留めたとき、487X範囲のポートを試しました。

問題がMicrosoft(「ソース」)サーバー側にあるのか、Linux(「クライアント」)側にあるのかはわかりません。

考え?

4
TheDavidJohnson

ファイル転送またはディレクトリリストの場合、FTPは動的ポートで追加のTCP接続を開きます。アクティブモードでは、クライアントはローカルリスナーを作成し、PORTコマンドとサーバーを使用してサーバーにIP:ポートを通知します次に、クライアントポートに接続します(通常、サーバー側のポート20から)パッシブモードでは、サーバーはポートを開き、クライアントのPASVコマンドに応答してリッスンする場所をクライアントに通知します。

両方のモードが必要

  • 反対側から到達可能なIP(例:単純なNATルーターの背後にあるクライアントのアクティブモード
  • リスナー側のポートは接続ごとに異なるため、ファイアウォールはありません。

デスクトップクライアントからアクセスするのに問題がない場合は、デスクトップクライアントがアクティブモードを使用しているのに対し、wgetはパッシブモードを使用している、またはデスクトップとサーバーの間にファイアウォール/ NATルーターがない、ただし、共有ホスティングとサーバーの間に1つあります。

あなたのセットアップについてより多くの詳細を得ることなしに、もっと推測するのは難しいです。

4
Steffen Ullrich

もう1つの方法は、パッシブモードを回避することです。wgetコマンドで--no-passive引数を追加すると、それを実行できます。

wget -r --no-passive --no-parent ftp://account:[email protected]/infinit_request/ -P /root
2
ytll21

VSFTPDの場合、パッシブポートの範囲を指定できます

pasv_min_port=1024
pasv_max_port=1048

クレジット: Amazon Cloud ServerでのFTPのセットアップ

さらに、wgetfailが表示されていましたが、curlsucceed

pasv_address

リクエストのIPと一致しませんでした。リクエストは外部ネットワークIPを使用していましたが、pasv_addressは内部ネットワークIPでした。

これが発生した理由はわかりませんが、wgetとcurlの間の基本的な実装の違いである必要があります。

0
storm_m2138

あなたのftpサーバーはプライベートIPで、NATポートフォアウォーリングを使用していると思いますが、NATデバイスでFTP ALGを有効にする必要があります。

==> PASV ...に接続できません192.168.1.ポート64316:接続がタイムアウトしました

NATデバイスまたはファイアウォールでFTP ALGを有効にすると、プライベートIP 192.168.1.3がパブリックIPに変更されるため、wgetはftpサーバーとの接続を確立できます

0
Hogan