scp 在嘗試將文件從 Linux 複製到 Windows 時卡住
我使用以下 scp 語法將分配的文件從 Linux red-hat 5 傳輸到 Windows 機器(在 Temp 目錄下),
評論:
- SSH 伺服器已經安裝在 windows 機器上
- 我在我的 shell 腳本中使用了這一行
sshpass -p '$password' /usr/bin/scp -o StrictHostKeyChecking=no $FILE USER_1@14.187.12.139:'D:/Temp'
在大多數情況下,文件傳輸成功
但有時 scp 在文件傳輸過程中卡住了?,儘管連接正常,如 ping 等
我從 scp 收到以下錯誤(經過很長時間)
ssh_exchange_identification: read: Connection reset by peer
- 為什麼 scp 不穩定並卡住了?,以及這個問題的解決方案是什麼?
- scp 的其他好選擇是什麼?, (考慮到我需要 100% 的穩定性)
這可能是網路問題的徵兆 - ping 無法擷取所有問題。最可能的罪魁禍首是斷開連接的防火牆或 NAT 設備。
為 scp 的詳細輸出添加 -v 將為您提供有關它在做什麼的更多詳細資訊,並可能為正在發生的事情提供更好的線索。如果您想使用 -v 選項發布傳輸失敗的輸出,我也許可以給出更準確的答案。
由對等方重置連接意味著 - 目標伺服器重置/關閉連接。如果一段時間沒有發送任何數據,或者如果它們無法正常工作,NAT 設備將執行此操作。
一些 ISP 會將此作為流量整形的一種形式來限制對等流量 - 不幸的是,有些 ISP 也將其應用於 SSH 連接。這可能不會成為業務連接的問題,但如果任一端都有住宅網際網路連接,則可能適用。
Windows 上的 SSH 伺服器也可能不穩定。您沒有指定使用哪一個,但並非所有這些都可靠地工作。
在一個現實生活中的奇怪例子中,我有一個朋友也有類似的問題——結果證明是他的電纜調製解調器韌體中的一個錯誤,每幾百萬個數據包中就有一個損壞了。很少有小轉移可以完美執行,但大轉移每次都會死掉。
或者它可能只是正常的網際網路問題。網際網路不是 100% 可靠的,而且永遠不會。有時連接會失敗,有時數據包會在途中失去。有時,乙太網電纜內的小人會罷工,不想攜帶您的數據包。所以你需要一個可以處理這個問題的工具,並不斷重試直到成功。
rsync 在這裡會是一個更好的選擇,僅僅是因為它允許恢復。 這篇博文解釋瞭如何設置 rsync 並用 resuming 代替 scp。如有必要,您可以編寫一個簡單的 shell 腳本來檢查 rsync 的退出程式碼,如果失敗則繼續重試。 This other blog post有一個這樣的腳本的例子。