簡體   English   中英

Linux:通過ssh連接自動執行sftp文件傳輸

[英]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來監視目錄並在修改時觸發。 文件名可以提供給rsyncscp 例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM