web-dev-qa-db-ja.com

Google Compute EngineからFTPサーバーに接続するときに「接続を開かない」を取得する

コンピューティングエンジンのVMにsshし、そこから別のサーバーにFTPで接続したい。ユーザー名とパスワードを尋ねたら、問題なくログインできた。しかし、lsまたはget、次のエラーが表示されます。

500 I won't open a connection to 10.240.XX.XX (only to XX.XX.XX.XX)
ftp: bind: Address already in use

その10.240.XX.XXは、ifconfigの結果で見た私の内部IPアドレスです。

FTPを使用して別のサーバーからファイルを転送するにはどうすればよいですか?システム:Debian7

24
Nur Pinar

FTPのアクティブモードを使用して、Pure-FTPdを実行しているサーバーに接続しています。アクティブモードでは、サーバーはクライアントに接続してデータ転送接続を開く必要があります(ファイル転送またはディレクトリリスト用)。そのために、クライアントはPORTコマンドでIPアドレスをFTPサーバーに送信します。

FTPサーバーがGCEプライベートネットワークの外部にある場合、クライアントマシンはファイアウォールとNATの背後にあるため、明らかにクライアントマシンに接続できません。

実際、Pure-FTPdはPORTコマンドのIPアドレスがFTP制御接続のクライアントIPアドレスと一致することを明示的にチェックします。クライアントがGCEネットワーク内で内部IPアドレスを送信する場合、一致しません。この場合、Pure-FTPdサーバーが転送メッセージを(接続しようとさえせずに)エラーメッセージで拒否すると、次のメッセージが表示されます。

...への接続を開きません(...のみ)

(ここで最初の...は、クライアントがPORTコマンド(GCEプライベートネットワーク内のローカルアドレス)で提供するIPアドレスであり、2番目の...は、サーバーが認識しているクライアントの外部[NAT] IPアドレスです)。


クライアントがPORTコマンドで外部[NATed]アドレスを報告したとしても、接続試行がNATおよびファイアウォールを通過しないため、まだ機能しません。

このため、パッシブFTPモードが存在し、クライアントはサーバーに接続してデータ転送接続を開きます。実際、最近では誰もアクティブモードを使用していません。

モードの詳細については、(私の記事) FTP接続モード を参照してください。

そのため、パッシブモードに切り替えます。これを行う方法はクライアント固有です。

  • 最も一般的な* nix ftpコマンドラインクライアントでは、-pコマンドラインスイッチ。ただし、デフォルトではパッシブモードが使用されます。

    -pデータ転送にパッシブモードを使用します。ファイアウォールが外部からクライアントマシンへの接続を妨げる環境でftpの使用を許可します。 FTPサーバーがPASVコマンドをサポートする必要があります。これは、PORT転送モードを使用するセキュリティ上の懸念により、すべてのクライアント(ftpおよびpftp)のデフォルトになりました。フラグは互換性のためにのみ保持され、効果はありません。

  • 一部のクライアントは、passiveコマンドもサポートしています。

57
Martin Prikryl

パッシブモードでFTPを有効にします。既に接続している場合は、入力してください

ftp> passive
Passive mode on.

現在、パッシブモードでFTPを使用しています。

25
RizonBarns

PsPadエディターを使用していて、同じ問題がある場合は、接続にこの構成を設定してみてください。

enter image description here

2
paulalexandru