web-dev-qa-db-ja.com

FTPアクティブ/パッシブが期待どおりに機能しない

ですから、現時点で興味深い問題があります。 curl(CentOSでは7.15.5)を使用して、リモートFTPサーバーからファイルを取得しようとしています。私たちのクライアントは先週末に何かを変更しました。それは金曜日に機能し、現在は機能していないためです。

CLIクライアントを使用してFTPで転送し、ディレクトリリストを正常に取得できますが、パッシブモードをオフにするには「パッシブ」を発行する必要があります。そうしないと、

421 Service not available, remote server has closed connection
Passive mode refused.  Turning off passive mode.
No control connection for command: Transport endpoint is not connected
ftp> 

了解しました。明らかに、パッシブモードを無効にする必要があります。マニュアルページを数回読んで、「アクティブ」モードを指定するために-Pを使用する必要があることを理解していますが、ドキュメントから、これによりクライアント(私の)マシンのデータ用のポートが開かれるようです。にストリーミングします。ファイアウォールの背後にあるため、これは機能しません。

これは、CLIクライアントがアクティブモードで動作するため、私が何かを誤解していることを示しています。

Serverfault-kenobiを助けてください、あなたは私の唯一の希望です。

2
Matt Simmons

わかった!

キーis-Pを使用しますが、別のポートを開いて接続することはできないため、「明白な」選択を使用する必要があります。

ドキュメントを引用するには:

-curlに制御接続にすでに使用されているものと同じIPアドレスを選択させる

したがって、curlコマンド

curl -u username:password -P - -o output.file ftp://whatever/source.file

-P -は重要な部分でした。基本的に、curlはデータの転送に使用できる唯一の接続(コマンド接続)を使用します。

やあ!

1
Matt Simmons

これ リンク はアクティブとパッシブを非常によく説明しています。

1
Kyle Brandt

私にとって-それを機能させるために-私はまた--disable-eprtも追加しなければなりませんでした:

curl --disable-eprt -u username:password -P - ftp://whatever/source.file
0
Nik