Scp

scp 會丟包嗎?

  • October 25, 2017

上週我嘗試將 200 MB 的文件傳輸到遠端電腦。然後我得到了一個 30 MB 的文件。今天我嘗試對整個目錄進行 scp,但失去了大量文件。

scp正常嗎?如何防止這種情況?

編輯:

我為 scp 文件編寫了一個期望腳本,它可能相關嗎?

這個腳本很簡單:

#!/usr/bin/expect
set file [lindex $argv 0];
set ip [lindex $argv 1];
spawn scp -r $file $ip
expect {
   "*password*" {send "password\r"}
   "*(yes/no)?*" {send "yes\r";exp_continue}
}
expect eof

沒有錯誤消息,只是沒有複製失去的文件。

Scp 不能保證複製會正確發生。沒有任何軟體可以保證正確複製。總有可能出現電源或網路中斷、源文件無法讀取、目標卷已滿等情況。

一個文件拷貝軟體最多能做的就是保證當它退出時,要麼拷貝正確,要麼軟體報錯。檢查錯誤的可靠方法是檢查程序的返回狀態:0 表示成功,任何其他值表示錯誤。scp 與任何半途而廢的程序一樣,在成功時返回 0,在失敗時返回非零值。

您的 expect 腳本不檢查 的返回狀態scp,因此您無法知道 scp 是否告訴您複製成功。

Expect 在這裡不是一個有用的工具。你真的應該使用公鑰認證。如果您真的,真的無法設置密鑰,請使用sshpass而不是自己滾動。

此外,您應該使用rsync而不是 scp。Rsync 有一個主要優勢:如果一個副本被中斷,你可以再次執行它,它會從中斷的地方開始。請務必告訴它保留時間戳以及其他元數據,除非您有充分的理由不:

rsync -a SOURCE/ DESTINATION/

引用自:https://unix.stackexchange.com/questions/400339