1

私は ec2 で Python 2.6.5 を実行しています。古い ftplib を、FTP_TLS のインポートを可能にする Python2.7 の新しいものに置き換えました。それでも、次のことが私にかかっています:

from ftplib import FTP_TLS
ftp = FTP_TLS('host', 'username', 'password')
ftp.retrlines('LIST')(15 ~ 20 分後にタイムアウト)

これらの 3 つの行は、ローカル マシンでは数秒で正常に実行できますが、ec2 では失敗します。これがなぜなのかについて何か考えはありますか?

ありがとう。

4

2 に答える 2

0

確かPASSIVEに、FTP 接続でモードになっているかどうか、および接続の両端がそれをサポートできるかどうかに関連する問題のように思えます。

ftplibのドキュメントでは、デフォルトでオンになっていることが示唆されていますが、これは残念なことです。代わりにset_debuglevel、低レベルのプロトコルが発生しているのを確認できる場所に移動し、現在のモードを確認することをお勧めします。これにより、続行方法に関する情報が得られるはずです。あなたがパッシブ モードになっていて、相手側が適切に処理できないか、または (できれば) 処理できないが、処理する必要があるかのいずれかです。

FTP および FTPS (ただし SFTP は除く) は、サーバーが実際の転送のためにクライアントに逆方向接続を行うように、またはクライアントが転送のためにサーバーに 2 番目の順方向接続を行うように構成できます。特に前者は、ネットワーク アドレス変換が関係するときはいつでも複雑になりがちです。TLS がなければ、一部のファイアウォールは実際に FTP セッション トラフィックを書き換えて魔法のように機能させることができますが、TLS では暗号化のために不可能です。

データを転送しようとすると、おそらく認証されてからタイムアウトになるという事実 (LIST では、一方向または他方向の 2 番目の接続が必要です) は、通常、パッシブ モードが必要なセットアップの典型的な症状です。

通常どおりポート 21 に接続し、認証前に FTP 制御接続を暗黙的に保護*します。データ接続を保護するには、ユーザーが prot_p() メソッドを呼び出して明示的に要求する必要があります。

ftps.prot_p()          # switch to secure data connection
ftps.retrlines('LIST') # list directory content securely

SFTP の方がはるかに問題が少ないため、FTPS を使用することはあまりありませんが、そうしないと、遠端のサーバーが連携していない可能性があります。

*注、この文は、データ接続の明示的な保護とは対照的に、FTP_TLS が「暗黙的に FTP 制御接続を保護する」ことを言おうとしていると思われます。

于 2013-09-26T01:51:33.853 に答える
0

それでも問題が解決しない場合は、Amazon ファイアウォールの問題を除外してみてください。(ホストベースのファイアウォールを使用していないと仮定しています。)

EC2 インスタンスがVPC にある場合、AWS マネジメント コンソールで次のことができます。

  • インターネットゲートウェイがあることを確認してください
  • EC2 インスタンスが存在するサブネットに、インターネット ゲートウェイを指すデフォルト ルート (0.0.0.0/0) が設定されていることを確認します。
  • インバウンドとアウトバウンドの両方のセキュリティ グループで、すべてのソースからのすべてのトラフィックを許可する (0.0.0.0/0)
  • インバウンドとアウトバウンドの両方のネットワーク ACL で、すべてのソースからのすべてのトラフィックを許可します (0.0.0.0/0)

EC2 インスタンスがVPC にない場合、AWS マネジメント コンソールで次のことができます。

  • インバウンドのセキュリティ グループでは、すべてのソースからのすべてのトラフィックを許可します (0.0.0.0/0)

これはテスト環境でのみ行ってください。(明らかに)

これにより、EC2 インスタンスがインターネットからのすべてのトラフィックに対して開かれます。うまくいけば、FTPS が機能していることがわかります。次に、問題の原因がわかるまで、セキュリティ ルールを徐々に再適用できます。それでも機能しない場合は、AWS ファイアウォールが問題の原因ではありません (または複数の問題があります)。

于 2013-09-29T09:38:37.660 に答える