使用Linux SFTP進行自動化腳本編寫可以通過多種方式實現,其中最常見的是使用sshpass
工具結合expect
腳本,或者使用Python的paramiko
庫。以下是兩種方法的詳細步驟:
sshpass
和expect
安裝sshpass
:
sudo apt-get install sshpass
編寫expect
腳本:
expect
是一個用于自動化交互式應用程序的工具,比如SSH。
創建一個名為sftp_auto.sh
的文件,并添加以下內容:
#!/usr/bin/expect
set timeout 20
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>"
send "cd $remote_dir\r"
expect "sftp>"
send "lcd $local_dir\r"
expect "sftp>"
send "mput *\r"
expect "sftp>"
send "bye\r"
expect eof
賦予腳本執行權限:
chmod +x sftp_auto.sh
運行腳本:
./sftp_auto.sh your_host your_user your_password /remote/directory /local/directory
paramiko
庫安裝paramiko
:
pip install paramiko
編寫Python腳本:
創建一個名為sftp_auto.py
的文件,并添加以下內容:
import paramiko
import os
def sftp_upload(host, port, username, password, remote_dir, local_dir):
transport = paramiko.Transport((host, port))
transport.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.chdir(remote_dir)
for filename in os.listdir(local_dir):
local_path = os.path.join(local_dir, filename)
remote_path = os.path.join(remote_dir, filename)
sftp.put(local_path, remote_path)
sftp.close()
transport.close()
if __name__ == "__main__":
host = 'your_host'
port = 22
username = 'your_user'
password = 'your_password'
remote_dir = '/remote/directory'
local_dir = '/local/directory'
sftp_upload(host, port, username, password, remote_dir, local_dir)
運行腳本:
python sftp_auto.py
sshpass
和明文密碼存在安全風險,建議使用SSH密鑰認證。通過以上兩種方法,你可以實現Linux SFTP的自動化腳本編寫,選擇適合你需求的方法進行實現。