首页主机资讯如何使用CentOS SFTP进行批量文件传输

如何使用CentOS SFTP进行批量文件传输

时间2025-12-12 00:15:03发布访客分类主机资讯浏览349
导读:CentOS SFTP批量文件传输实用指南 一 前置准备 确认已安装 SFTP 客户端:大多数 CentOS 默认自带 OpenSSH 客户端(包含 sftp)。如需安装或补装,可执行:sudo yum install -y openss...

CentOS SFTP批量文件传输实用指南

一 前置准备

  • 确认已安装 SFTP 客户端:大多数 CentOS 默认自带 OpenSSH 客户端(包含 sftp)。如需安装或补装,可执行:sudo yum install -y openssh-clients。为提升安全性与自动化能力,建议生成 SSH 密钥对 并将公钥部署到远端:ssh-keygen -t rsa -b 4096,随后 ssh-copy-id user@remote_host。若必须明文密码,后续可用 expect 自动化输入,但更推荐密钥方式。

二 方法一 批处理脚本结合 SFTP 内置命令

  • 适用场景:按文件清单或通配符进行批量上传/下载,逻辑可控、易于审计。
  • 示例 1(上传通配符):在本地目录执行
    sftp user@hostname <
        <
        'EOF'
    cd /remote/path
    lcd /local/path
    put *.txt
    bye
    EOF
    
  • 示例 2(按清单文件批量上传):准备清单 file_list.txt(每行一个文件相对或绝对路径),执行
    sftp -b - user@hostname <
        <
        'EOF'
    cd /remote/path
    lcd /local/path
    $(while IFS= read -r f;
         do echo "put \"$f\"";
         done <
         file_list.txt)
    bye
    EOF
    
  • 说明:SFTP 的 put/get 支持通配符;通过 -b - 从标准输入读取批量命令;如需下载,将 put 换为 get,并注意本地/远端目录切换(lcd/cd)。上述方式适合稳定、可预期的批量任务。

三 方法二 使用 lftp 实现高效批量与并发

  • 适用场景:目录镜像、断点续传、并发传输(SFTP 协议本身不直接支持多线程,lftp 提供并行能力)。
  • 安装:sudo yum install -y lftp
  • 批量上传(目录镜像):
    lftp -e 'mirror --reverse --parallel=10 -R /local/path /remote/path;
         quit' -u username,password sftp://hostname
    
  • 批量下载(目录镜像):
    lftp -e 'mirror --parallel=10 /remote/path /local/path;
         quit' -u username,password sftp://hostname
    
  • 常用增强项:
    • -c/–continue 断点续传;–delete 使远端与本地保持一致(谨慎使用);
    • -P/–parallel=N 并行文件数;–use-pget=N 对大文件分片并发拉取;
    • 可加入 -v/–verbose 观察执行过程。lftp 的 mirror 支持丰富的包含/排除规则,适合复杂同步策略。

四 方法三 使用 expect 自动化交互式 SFTP(含密码场景)

  • 适用场景:无法使用密钥、必须以密码登录且需自动化执行时。
  • 安装:sudo yum install -y expect
  • 示例脚本(批量上传当前目录所有文件):
    #!/usr/bin/expect -f
    set timeout 30
    set host "remote_host"
    set user "your_username"
    set pass "your_password"
    set local_dir "/path/to/local"
    set remote_dir "/path/to/remote"
    
    spawn sftp $user@$host
    expect "password:"
    send "$pass\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_batch.sh;运行:./sftp_batch.sh;
    • 建议重定向日志便于审计:./sftp_batch.sh > sftp_batch.log 2> & 1;
    • 安全性提示:避免在脚本中硬编码密码,优先采用 SSH 密钥;如用 expect,请限制脚本权限并做好日志与访问控制。

五 方法四 提升效率的替代与增强方案

  • 并行拉取大文件(lftp pget):
    lftp -e 'pget -n 8 sftp://hostname/remote/bigfile.iso -o bigfile.iso;
     quit' -u username,password
    
  • 使用 rsync over SSH(非 SFTP,但常用且高效,支持带宽限制与增量):
    rsync -avz --progress --bwlimit=10000 -e ssh /local/path/ user@hostname:/remote/path/
    
  • 使用 parallel + scp(多进程并发,非 SFTP):
    find /local/path -type f | parallel -j 4 scp -i /path/to/key {
    }
         user@hostname:/remote/path/
    
  • 定时批量(配合 crontab):将上传/下载脚本加入 crontab 实现按日/小时自动执行,便于日志归集与对账。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何使用CentOS SFTP进行批量文件传输
本文地址: https://pptw.com/jishu/769972.html
如何升级CentOS上的SFTP服务版本 CentOS SFTP传输大文件注意事项

游客 回复需填写必要信息