Bash

使用 sshpass 將文件從遠端主機傳輸到本地

  • October 10, 2018

我想將 40 天以前的文件從遠端傳輸到本地主機。我能夠連接遠端伺服器,但無法將文件從遠端伺服器傳輸到本地伺服器。它導致錯誤說沒有文件沒有這樣的文件或目錄,但文件存在於遠端主機上。

細節:

file=`sshpass -p "password" ssh username@server_ip "find /arch -type f -ctime -40"`
sshpass -p "password" scp -r  username@server_ip:$file /arch
echo SCP Completed.

錯誤詳情:

cp: cannot stat ‘/arch/file1.xls’: No such file or directory

您必須處理一兩件事:

  • 權限:您可能沒有讀取文件的正確權限;
  • 多行答案:您的查找結果可能會給您多個文件。

長話短說,可能你的問題不是sshpass

從現在開始,我們理所當然地認為您沒有與權限相關的問題。

你可以做的是這樣的事情:

files="$(sshpass -p "passwd" ssh -l username rhost "find /arch -type f -ctime -40")"
for file in ${files}; do
 if sshpass -p "passwd" scp "username@rhost:${file}" /arch; then
   printf "SCP Completed\n"
 fi
done

理論上,$files不會包含您無法抓取的內容,因為find將列印在stderr您無法訪問的文件(文件夾)中,因此您應該以單獨的方式進行管理。

在所有選項中,您可以在循環中合併stderrstdout添加條件,for或者將錯誤保存在另一個 var(或文件)中並單獨循環。

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