centos

centos sftp脚本自动化操作

小樊
40
2025-03-01 12:35:15
栏目: 智能运维

在CentOS系统中,使用SFTP(SSH File Transfer Protocol)进行文件传输是一种常见的需求。为了实现自动化操作,可以编写脚本来执行一系列的SFTP命令。以下是一个基本的示例,展示如何使用Shell脚本来自动化SFTP操作。

假设你需要从一个本地目录上传文件到远程服务器,并从远程服务器下载文件到本地目录。你可以创建一个名为sftp_script.sh的Shell脚本,并按照以下步骤进行配置:

  1. 创建Shell脚本文件

    nano sftp_script.sh
    
  2. 编写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
    
  3. 赋予脚本执行权限

    chmod +x sftp_script.sh
    
  4. 运行脚本

    ./sftp_script.sh
    

注意事项

使用SSH密钥认证

如果你希望使用SSH密钥认证而不是密码认证,可以按照以下步骤进行配置:

  1. 生成SSH密钥对(如果还没有):

    ssh-keygen -t rsa
    
  2. 将公钥复制到远程服务器

    ssh-copy-id your_username@remote_host
    
  3. 修改脚本以使用密钥认证

    #!/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操作的自动化,并且提高脚本的安全性和可靠性。

0
看了该问题的人还看了