[英]Linux: automated sftp file transference by an ssh connection
我需要創建一個crontab腳本(自動和定期執行),該腳本應該找到文件夾的最新更改文件,然后使用sftp連接將其傳輸到另一台機器。 通過提取所需文件的名稱來解決問題的第一部分:
cd $myFolder
output=$(find . -type f -printf "%C@ %p\n" | sort -rn | head -n 1)
filename=$(echo $output | cut -d'/' -f 2)
但第二部分很難,因為我無法找到在Linux sftp連接中鍵入$filename
變量值的方法,也無法以非交互方式鍵入用戶/密碼。 將其保存到臨時文件中可能是一個很好的解決方案。
還有更好的選擇嗎?
謝謝
您可以使用inotify來監視目錄並在修改時觸發。 文件名可以提供給rsync
或scp
。 例:
inotifywait \
--quiet \
--event modify \
--format '%f' \
--monitor watch_directory |
while read FILE; do \
scp watch_directory/$FILE host:/destination;
done
您可以使用scp
而不是sftp
- 它使用相同的協議,但更適合非交互式使用。
如果目錄只包含文件(沒有子目錄),您可以在只有ls
的目錄中找到最后修改的文件:
output=$(ls -t "$myFolder" | head -1)
您可以使用curl通過sftp將文件上傳到遠程服務器,並在命令中傳遞登錄信用(用戶名和密碼),如下所示:
curl -T uploadfilename -u username:password sftp://sitename.com/myfile
我的解決方案
要獲取文件名:
filename=$(ls -t . | head -1)
要將數據傳輸到遠程服務器:
#!/usr/bin/expect -f
# A copy of the $sourceFile is sent to the $targetPath by using the scp command (secure copy)
set timeout 20
set sourceFile [lindex $argv 0]
set targetPath [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
# connect via scp
spawn scp $sourceFile "$user@$targetPath"
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "$password\r"
}
}
interact
用戶身份驗證委派給使用此腳本的腳本,可以通過在遠程服務器中生成公鑰/私鑰rsa密鑰對,然后使用它來進行:讀取下一個鏈接: 無需密碼的SSH登錄 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.