上傳檔案時,lftp 上的“連接被對等重置”

上傳檔案時,lftp 上的“連接被對等重置”

我正在進行一個項目,其中多個 Raspberry Pi 每天多次收集感測器資料並將其記錄到多個檔案中。我想編寫一個小腳本,以便在一天結束時使用 crontab 將所有這些檔案上傳到 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 使用兩個連接埠:一個指令連接,一個資料連接。傳統上,命令連線是從客戶端到伺服器,資料連線是從伺服器到客戶端!

PASV 則相反;它指示伺服器偵聽來自客戶端的資料連接,並告訴客戶端它的連接埠號碼。看來這種(對很多人來說出乎意料的)行為正在困擾你。

然而,在我看來,今天繼續使用 FTP 並不是一個好的選擇。從安全角度和協定角度來看,它已經過時了。

您有多種 FTP 替代方案。如果您使用身份驗證,scp/sftp 是一個不錯的選擇。它只需要一個端口,經過身份驗證和加密。

如果您需要匿名提交,http(s) 是一個不錯的選擇。透過 POST 請求或使用 WebDAV。 Http 可以設定為使用身份驗證,並且可以使用 TLS (https) 加密。它也只為資料和命令開啟一個通道。

FTP 是一個已有 40 年歷史的協定。它已經不再使用,因此該軟體沒有像更流行的 Web 伺服器和 ssh 伺服器那樣受到足夠的關注,因此原始程式碼中存在嚴重漏洞的可能性更高。

此外,SCP'ing 的命令會簡單得多:scp * $user@$host:$targetfolder- 您可以使用基於金鑰的身份驗證來避免在腳本中使用密碼!

相關內容