在CentOS系統中,使用SFTP(SSH File Transfer Protocol)進行文件傳輸是一種常見的需求。編寫SFTP腳本可以幫助自動化文件傳輸過程,提高效率。以下是一些編寫SFTP腳本的技巧和步驟:
首先,確保你的CentOS系統上已經安裝并配置了SFTP服務器。通常,OpenSSH服務器已經包含了SFTP功能。
sudo yum install openssh-server
sudo systemctl start sshd
sudo systemctl enable sshd
為了安全起見,建議為SFTP用戶創建一個單獨的用戶賬戶,并限制其訪問權限。
sudo adduser sftpuser
sudo passwd sftpuser
編輯/etc/ssh/sshd_config
文件,配置SFTP chroot環境。
sudo vi /etc/ssh/sshd_config
找到并修改以下行:
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
創建一個組并添加SFTP用戶:
sudo groupadd sftpusers
sudo usermod -aG sftpusers sftpuser
確保chroot目錄的權限正確:
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
創建SFTP用戶的家目錄并設置權限:
sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
使用expect
工具可以自動化SFTP會話。首先安裝expect
:
sudo yum install expect
創建一個SFTP腳本文件,例如sftp_script.exp
:
#!/usr/bin/expect -f
set timeout 20
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set remote_dir [lindex $argv 3]
set local_dir [lindex $argv 4]
spawn sftp $username@$host
expect "password:"
send "$password\r"
expect "sftp>"
send "cd $remote_dir\r"
expect "sftp>"
send "put $local_dir/* .\r"
expect "sftp>"
send "bye\r"
expect eof
賦予腳本執行權限:
chmod +x sftp_script.exp
運行腳本:
./sftp_script.exp your_host sftpuser your_password /remote/directory /local/directory
為了提高安全性,建議使用SSH密鑰認證而不是密碼認證。
生成SSH密鑰對:
ssh-keygen -t rsa
將公鑰復制到遠程服務器:
ssh-copy-id sftpuser@your_host
修改SFTP腳本以使用密鑰認證:
#!/usr/bin/expect -f
set timeout 20
set host [lindex $argv 0]
set username [lindex $argv 1]
set private_key [lindex $argv 2]
set remote_dir [lindex $argv 3]
set local_dir [lindex $argv 4]
spawn sftp -i $private_key $username@$host
expect "sftp>"
send "cd $remote_dir\r"
expect "sftp>"
send "put $local_dir/* .\r"
expect "sftp>"
send "bye\r"
expect eof
運行腳本:
./sftp_script.exp your_host sftpuser /path/to/private_key /remote/directory /local/directory
通過以上步驟,你可以編寫一個安全且高效的SFTP腳本來自動化文件傳輸過程。