在CentOS系统中,使用SFTP(SSH File Transfer Protocol)进行文件传输是一种常见的需求。为了实现自动化操作,可以编写脚本来执行一系列的SFTP命令。以下是一个基本的示例,展示如何使用Shell脚本来自动化SFTP操作。
假设你需要从一个本地目录上传文件到远程服务器,并从远程服务器下载文件到本地目录。你可以创建一个名为sftp_script.sh
的Shell脚本,并按照以下步骤进行配置:
创建Shell脚本文件:
nano sftp_script.sh
编写SFTP脚本:
在脚本中,你可以使用expect
工具来自动化交互式的SFTP会话。首先确保你已经安装了expect
:
sudo yum install expect -y
然后编写脚本内容:
#!/usr/bin/expect -f
# 设置超时时间
set timeout 20
# 设置变量
set host "remote_host"
set username "your_username"
set password "your_password"
set local_dir "/path/to/local/directory"
set remote_dir "/path/to/remote/directory"
set local_file "local_file.txt"
set remote_file "remote_file.txt"
# 启动SFTP会话
spawn sftp $username@$host
# 匹配密码提示并输入密码
expect "password:"
send "$password\r"
# 切换到远程目录
expect "sftp>"
send "cd $remote_dir\r"
# 上传文件
expect "sftp>"
send "put $local_dir/$local_file\r"
# 下载文件
expect "sftp>"
send "get $remote_dir/$remote_file $local_dir\r"
# 退出SFTP会话
expect "sftp>"
send "bye\r"
# 结束expect脚本
expect eof
赋予脚本执行权限:
chmod +x sftp_script.sh
运行脚本:
./sftp_script.sh
如果你希望使用SSH密钥认证而不是密码认证,可以按照以下步骤进行配置:
生成SSH密钥对(如果还没有):
ssh-keygen -t rsa
将公钥复制到远程服务器:
ssh-copy-id your_username@remote_host
修改脚本以使用密钥认证:
#!/usr/bin/expect -f
# 设置超时时间
set timeout 20
# 设置变量
set host "remote_host"
set username "your_username"
set private_key "/path/to/private_key"
set local_dir "/path/to/local/directory"
set remote_dir "/path/to/remote/directory"
set local_file "local_file.txt"
set remote_file "remote_file.txt"
# 启动SFTP会话
spawn sftp -i $private_key $username@$host
# 匹配密码提示并输入密码(如果需要)
expect "password:"
send "your_password\r"
# 切换到远程目录
expect "sftp>"
send "cd $remote_dir\r"
# 上传文件
expect "sftp>"
send "put $local_dir/$local_file\r"
# 下载文件
expect "sftp>"
send "get $remote_dir/$remote_file $local_dir\r"
# 退出SFTP会话
expect "sftp>"
send "bye\r"
# 结束expect脚本
expect eof
通过这种方式,你可以实现SFTP操作的自动化,并且提高脚本的安全性和可靠性。