如何使用CentOS SFTP进行批量文件传输
导读: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
