在 CentOS 上实现 SFTP 定时备份,通常分为 三个部分:
1️⃣ 通过 SFTP 拉取/推送文件
2️⃣ 编写备份脚本
3️⃣ 使用 crontab 定时执行
下面给你一套 生产环境常用方案(从本地 → 远程 SFTP 备份,或反向)。
sftp user@remote_ip
ssh-keygen -t rsa -b 4096
ssh-copy-id user@remote_ip
测试:
ssh user@remote_ip
lftp 实现 SFTP 定时备份(推荐)yum install -y lftp
vi /opt/sftp_backup.sh
#!/bin/bash
# 配置
SFTP_USER="sftpuser"
SFTP_HOST="192.168.1.100"
REMOTE_DIR="/data/upload"
LOCAL_DIR="/backup/sftp"
DATE=$(date +%F)
# 创建本地目录
mkdir -p ${LOCAL_DIR}/${DATE}
# 开始备份
lftp -u ${SFTP_USER}, sftp://${SFTP_HOST} <<EOF
set sftp:auto-confirm yes
mirror -e --parallel=4 ${REMOTE_DIR} ${LOCAL_DIR}/${DATE}
bye
EOF
# 保留最近7天
find ${LOCAL_DIR} -type d -mtime +7 -exec rm -rf {} \;
赋予执行权限:
chmod +x /opt/sftp_backup.sh
/opt/sftp_backup.sh
crontab 定时执行crontab -e
0 2 * * * /opt/sftp_backup.sh >> /var/log/sftp_backup.log 2>&1
tail -f /var/log/sftp_backup.log
lftp -u user, sftp://remote_ip <<EOF
mirror -R /local/data /remote/backup
bye
EOF
rsync over SSH(更高效,推荐)如果对方支持 SSH:
rsync -avz --delete -e ssh /data/ user@remote_ip:/backup/
定时任务:
0 3 * * * rsync -avz --delete -e ssh /data/ user@remote_ip:/backup/
put/get/mirrorchown -R backupuser:backupuser /backup
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
| 场景 | 推荐 |
|---|---|
| 仅 SFTP | lftp |
| 可 SSH | rsync |
| 定时 | crontab |
| 增量 | rsync |
如果你愿意,我可以帮你 定制完整脚本(例如:按小时、压缩、加密、多服务器),只需要告诉我:
✅ 本地还是远程
✅ 是否支持 SSH
✅ 是否要压缩或保留多少天