ファイルのアップロード中に lftp で「ピアによって接続がリセットされました」

ファイルのアップロード中に lftp で「ピアによって接続がリセットされました」

私は、複数の Raspberry Pi がセンサー データを収集し、それを 1 日に数回、複数のファイルに記録するプロジェクトに取り組んでいます。crontab を使用して、1 日の終わりにすべてのファイルを FTP サーバーにアップロードする小さなスクリプトを作成したいと考えていました。そこで、lftp を使用してスクリプトを作成しましたが、最初は機能しましたが、後でエラーが表示されるようになりました。

以下はスクリプトと詳細出力です。どうすれば修正できますか?

    #!/bin/bash
    HOST='ftp://xyz.com'
    USER='xxxxxx'
    PASS='xxxxxx'
    TARGETFOLDER='/home/xxxx'
    SOURCEFOLDER='/home/pi/yyyy'

    lftp -f "
    open $HOST
    user $USER $PASS
    debug -o lftp_debug.txt
    lcd $SOURCEFOLDER
    mirror --reverse --delete --verbose $SOURCEFOLDER $TARGETFOLDER
    bye
    "

出力:

---- Connecting to xyz.com (xx.xx.xx.xx) port 21   
<--- 220 (vsFTPd 3.0.3)   
---> FEAT    
<--- 211-Features:   
<---  EPRT    
<---  EPSV    
<---  MDTM    
<---  PASV   
<---  REST STREAM    
<---  SIZE 
<---  TVFS
<--- 211 End    
---> USER XXXX  
<--- 331 Please specify the password.    
---> PASS XXXX   
<--- 230 Login successful.   
---> PWD   
<--- 257 "/home/XXXX" is the current directory   
---> MKD /home   
<--- 550 Create directory operation failed.    
---> MKD /home/XXXX
<--- 550 Create directory operation failed.
---- CWD path to be sent is `/home/XXXX'  
---> CWD /home/XXXX   
<--- 250 Directory successfully changed.    
---> PASV    
**** control-socket: Connection reset by peer
---- Closing data socket   
---- Closing control socket 

##アップデート2##

面白いのは、同じユーザー名とパスワードを使用して「FTP」コマンドで同じ FTP サーバーにログインすると、問題なく動作するのですが、lftp同じユーザー名とパスワードを使用してログインすると、サーバーにログインできるものの、コマンドを実行するとすぐにls次の出力が表示されることです。

lftp [email protected]:~> ls
`ls' at 0 [Delaying before reconnect: 24]

##アップデート3##

代わりに SFTP を使ってみましたが、正常に動作しました。これで誰かの時間が節約されることを願っています。

答え1

ftp を使用しないでください。発生している問題は、FTP の接続方向の一般的な混乱に関連している可能性があります。FTP は、コマンド接続とデータ接続の 2 つのポートを使用します。従来、コマンド接続はクライアントからサーバーへ、データ接続はサーバーからクライアントへでした。

PASV はその逆で、サーバーにクライアントからのデータ接続をリッスンするように指示し、クライアントにポート番号を伝えます。この (多くの人にとって予想外の) 動作が問題となっているようです。

しかし、私の意見では、FTP を使い続けることは、今日では良い選択肢ではありません。セキュリティ面でもプロトコル面でも、FTP は単純に時代遅れです。

FTP の代替手段はいくつかあります。認証を使用する場合、scp/sftp は適切な代替手段です。必要なポートは 1 つだけで、認証され、暗号化されます。

匿名での送信が必要な場合は、http(s) が適しています。POST リクエストまたは WebDAV のいずれかを使用します。Http はまた認証を使用するように設定でき、TLS (https) で暗号化できます。また、データとコマンドの両方に対して 1 つのチャネルのみが開かれます。

FTP は 40 年前のプロトコルです。使用されなくなっており、その結果、このソフトウェアはより一般的な Web サーバーや SSH サーバーほど注目されなくなり、ソース コードに深刻な脆弱性が残る可能性が高くなります。

さらに、SCP のコマンドははるかに簡単になります。scp * $user@$host:$targetfolder- キーベースの認証を使用して、スクリプト内でパスワードを回避することもできます。

関連情報