サーバーへのSSHセッションを開かないと、FTP転送は失敗します。

サーバーへのSSHセッションを開かないと、FTP転送は失敗します。

これは奇妙な質問です。

FTPサーバーとしてvsftpdを実行するcentOS 7ベースのサーバーがあります。

filezilla を使用して centOS ボックスからローカル クライアントにファイルをコピーすると、約 128 MB の数 MB (時々それ以下) が転送された後、転送は失敗します。

その後、CentOSサーバーにSSH経由でログインし、filezillaを使用する前と同様に、FTPダウンロードを繰り返すとファイル転送が完全かつ高速になります。

SSHを介してサーバーに接続することがFTP転送に影響を与える理由は一生不明です。誰もがこの動作の理由を考えることができますか?

答え1

FTP転送がサーバーへのSSHセッションを開くときにのみ機能する場合は、次の理由が考えられます。

  1. ファイアウォールまたはセキュリティ設定:サーバーのファイアウォールまたはセキュリティ設定では、SSH接続は許可されていますが、FTPは許可されていない可能性があります。 FTPトラフィックが許可されていることを確認するには、サーバー構成を確認する必要があります。

  2. フォワードポート: FTP は、データ接続と制御接続に異なるポートを使用します。サーバーがNATルーターの背後にある場合は、FTP接続を許可するようにポート転送を設定する必要があります。

  3. 手動FTP:手動FTPを使用している場合は、特定の範囲のポートを使用するようにFTPクライアントを設定する必要があります。サーバーの手動FTP設定を確認し、クライアントがそれに応じて設定されていることを確認してください。

  4. サーバー構成:コンピューターのFTPサーバーに問題を引き起こす特定の構成設定がある可能性があります。潜在的な問題を特定するには、FTPサーバーの設定とログを確認してください。

  5. ユーザー権限:FTPに使用するユーザーアカウントにファイルアクセスと転送に必要な権限があることを確認してください。 SSHセッションにはデフォルトで他の権限を付与できます。

SSHセッションを開かずにFTP転送が失敗する理由を確認するには、これらのゾーンを調査し、それに応じてサーバーまたはクライアント構成を調整する必要があります。

答え2

アクティビティがなく、ファイアウォールが切断された可能性が高いです。

FTP クライアントは、ファイル転送中にサーバーに何も送信する必要はありません。もちろん、クライアントは受信したすべてのデータチャンクに対してTCP ACKを送信します。しかし、問題は、FTPが2つのチャネル(データ用のチャネルとコマンド用のチャネル)を使用することです。後者は送信中に沈黙を維持する。

したがって、ファイルが非常に大きい場合、転送に時間がかかり過度に熱心な(そして愚かな)ファイアウォールは、コマンドチャネルが死んだと考えてそれを「閉じる」ことになります(おそらく伝統的な方法ではないかもしれません=時々動作を停止するかもしれません)どちらもこれを認識せずにNATに接続すると、データ転送は最終的に完了しません。

解決策?接続の維持を使用してください。 TCP接続の維持またはアプリケーション層の接続の維持(作業コマンドなし)。

FileZillaに接続を維持するオプションがあるのを見ました。設定->接続->FTP->FTP 接続維持コマンドの送信。一度試してください(ただし、頻度の設定が表示されず、短すぎる可能性があります)。

SSH接続が切断されないようにする理由はミステリーなので、最初に接続を切断する人に尋ねる必要があります(例えば、どの基準に応じて?)。

最後に、Chris Daviesのコメントからわかるように、scp、sftp、ssh + tar、またはssh + rsyncを使用すると、1つのチャネルのみを使用して柔軟な接続維持メカニズムを組み込むことができます。

関連情報