在Linux中,使用SFTP(SSH File Transfer Protocol)進行自動化腳本操作可以通過多種方式實現。以下是幾種常見的方法:
sshpass
和expect
sshpass
可以用來非交互式地輸入SSH密碼,而expect
可以用來自動化交互式命令。
安裝sshpass
和expect
:
sudo apt-get install sshpass expect
編寫自動化腳本:
創建一個名為sftp_auto.sh
的腳本文件,并添加以下內容:
#!/usr/bin/expect -f
set timeout -1
set host [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set remote_dir [lindex $argv 3]
set local_dir [lindex $argv 4]
spawn sftp $user@$host
expect "password:"
send "$password\r"
expect "sftp>"
# Change to remote directory
send "cd $remote_dir\r"
expect "sftp>"
# Put files from local to remote
send "put $local_dir/*\r"
expect "sftp>"
# Get files from remote to local
send "get *\r"
expect "sftp>"
# Close SFTP session
send "bye\r"
expect eof
賦予腳本執行權限:
chmod +x sftp_auto.sh
運行腳本:
./sftp_auto.sh your_host your_user your_password /remote/directory /local/directory
使用SSH密鑰認證可以避免每次都輸入密碼,更加安全。
生成SSH密鑰對(如果還沒有):
ssh-keygen -t rsa
將公鑰復制到遠程服務器:
ssh-copy-id user@host
編寫自動化腳本:
創建一個名為sftp_auto_ssh_key.sh
的腳本文件,并添加以下內容:
#!/bin/bash
host="your_host"
user="your_user"
remote_dir="/remote/directory"
local_dir="/local/directory"
sftp $user@$host <<EOF
cd $remote_dir
put $local_dir/*
get *
bye
EOF
4. **賦予腳本執行權限**:
```bash
chmod +x sftp_auto_ssh_key.sh
./sftp_auto_ssh_key.sh
lftp
lftp
是一個功能強大的文件傳輸工具,支持SFTP協議,并且可以通過腳本進行自動化操作。
安裝lftp
:
sudo apt-get install lftp
編寫自動化腳本:
創建一個名為lftp_auto.sh
的腳本文件,并添加以下內容:
#!/bin/bash
host="your_host"
user="your_user"
password="your_password"
remote_dir="/remote/directory"
local_dir="/local/directory"
lftp -e "
open sftp://$user:$password@$host;
cd $remote_dir;
put $local_dir/*;
get *;
quit;
"
賦予腳本執行權限:
chmod +x lftp_auto.sh
運行腳本:
./lftp_auto.sh
sshpass
和expect
時,密碼會以明文形式出現在腳本中,存在安全風險。建議使用SSH密鑰認證。ssh-agent
。通過以上方法,你可以實現Linux SFTP的自動化腳本操作,提高工作效率。