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(「クライアント」)側にあるのかはわかりません。
考え?
ファイル転送またはディレクトリリストの場合、FTPは動的ポートで追加のTCP接続を開きます。アクティブモードでは、クライアントはローカルリスナーを作成し、PORTコマンドとサーバーを使用してサーバーにIP:ポートを通知します次に、クライアントポートに接続します(通常、サーバー側のポート20から)パッシブモードでは、サーバーはポートを開き、クライアントのPASVコマンドに応答してリッスンする場所をクライアントに通知します。
両方のモードが必要
デスクトップクライアントからアクセスするのに問題がない場合は、デスクトップクライアントがアクティブモードを使用しているのに対し、wgetはパッシブモードを使用している、またはデスクトップとサーバーの間にファイアウォール/ NATルーターがない、ただし、共有ホスティングとサーバーの間に1つあります。
あなたのセットアップについてより多くの詳細を得ることなしに、もっと推測するのは難しいです。
もう1つの方法は、パッシブモードを回避することです。wgetコマンドで--no-passive引数を追加すると、それを実行できます。
wget -r --no-passive --no-parent ftp://account:[email protected]/infinit_request/ -P /root
VSFTPDの場合、パッシブポートの範囲を指定できます
pasv_min_port=1024
pasv_max_port=1048
クレジット: Amazon Cloud ServerでのFTPのセットアップ
さらに、wgetfailが表示されていましたが、curlsucceed
pasv_address
リクエストのIPと一致しませんでした。リクエストは外部ネットワークIPを使用していましたが、pasv_addressは内部ネットワークIPでした。
これが発生した理由はわかりませんが、wgetとcurlの間の基本的な実装の違いである必要があります。
あなたのftpサーバーはプライベートIPで、NATポートフォアウォーリングを使用していると思いますが、NATデバイスでFTP ALGを有効にする必要があります。
==> PASV ...に接続できません192.168.1.ポート64316:接続がタイムアウトしました
NATデバイスまたはファイアウォールでFTP ALGを有効にすると、プライベートIP 192.168.1.3がパブリックIPに変更されるため、wgetはftpサーバーとの接続を確立できます