温馨提示×

CentOS SFTP如何定时备份

小樊
47
2026-08-30 01:30:53
栏目: 智能运维

在 CentOS 上实现 SFTP 定时备份,通常分为 三个部分
1️⃣ 通过 SFTP 拉取/推送文件
2️⃣ 编写备份脚本
3️⃣ 使用 crontab 定时执行

下面给你一套 生产环境常用方案(从本地 → 远程 SFTP 备份,或反向)。


一、准备工作

1. 确认 SFTP 可用

sftp user@remote_ip

2. 建议使用 SSH 密钥(免密)

ssh-keygen -t rsa -b 4096
ssh-copy-id user@remote_ip

测试:

ssh user@remote_ip

二、使用 lftp 实现 SFTP 定时备份(推荐)

1. 安装 lftp

yum install -y lftp

2. 编写 SFTP 备份脚本

示例:从远程 SFTP 拉取文件到本地(最常见)

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

3. 手动测试

/opt/sftp_backup.sh

三、使用 crontab 定时执行

1. 编辑定时任务

crontab -e

2. 每天凌晨 2 点执行

0 2 * * * /opt/sftp_backup.sh >> /var/log/sftp_backup.log 2>&1

3. 查看日志

tail -f /var/log/sftp_backup.log

四、反向备份(本地 → 远程 SFTP)

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/

六、常见问题

1. SFTP 不是 rsync

  • SFTP 只能 put/get/mirror
  • 不支持增量(rsync 更好)

2. 权限问题

chown -R backupuser:backupuser /backup

3. 防火墙

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

七、推荐方案总结

场景 推荐
仅 SFTP lftp
可 SSH rsync
定时 crontab
增量 rsync

如果你愿意,我可以帮你 定制完整脚本(例如:按小时、压缩、加密、多服务器),只需要告诉我:
✅ 本地还是远程
✅ 是否支持 SSH
✅ 是否要压缩或保留多少天

0