如何在Ubuntu上实现FTP服务器自动备份
导读:在 Ubuntu 上实现 FTP 服务器自动备份 一 方案总览 备份方向通常有两种: 从 FTP 服务器拉取数据到本地归档(推荐用 lftp mirror 做增量同步)。 将本地生成的备份文件推送到 FTP 服务器(可用 lftp pu...
在 Ubuntu 上实现 FTP 服务器自动备份
一 方案总览
- 备份方向通常有两种:
- 从 FTP 服务器拉取数据到本地归档(推荐用 lftp mirror 做增量同步)。
- 将本地生成的备份文件推送到 FTP 服务器(可用 lftp put 或 ftp 客户端)。
- 定时执行采用 cron;如需看护与自启,可配合 systemd 服务与定时器。
- 若环境允许,优先使用 SFTP/FTPS 替代明文 FTP,以提升安全性。
二 准备与前提
- 安装必要工具:建议安装 lftp(稳定、支持镜像与 FTPS),以及 vsftpd 作为示例 FTP 服务(如尚未安装)。
- sudo apt update & & sudo apt install -y lftp vsftpd
- 规划目录与权限:
- 本地备份目录:如 /backup,确保有充足空间与正确属主。
- 日志目录与权限:如 /var/log/ftp_backup.log,建议属主 root:adm、权限 660,便于审计。
- 基本 FTP 连通性验证(示例):
- lftp -u 用户名,密码 -e “ls; quit” ftp://服务器地址
三 备份脚本示例
- 示例 A 从 FTP 拉取目录到本地(增量镜像,适合定期全量备份)
#!/usr/bin/env bash
set -Eeuo pipefail
# 配置
HOST="ftp.example.com"
USER="ftpuser"
PASS="ftppass"
REMOTE_DIR="/data"
LOCAL_DIR="/backup/ftp_data"
LOG_FILE="/var/log/ftp_backup.log"
# 初始化
mkdir -p "$LOCAL_DIR"
exec >
>
"$LOG_FILE" 2>
&
1
echo "=== $(date '+%F %T') 开始备份 ==="
# 使用 lftp 镜像:--reverse 表示本地→远端为“反向”镜像(拉取),--delete 同步删除,--parallel 并发
lftp -u "$USER,$PASS" "$HOST" <
<
'EOF'
set ftp:ssl-allow no
mirror --reverse --delete --verbose --parallel=4 --allow-newer \
--exclude-glob "*.tmp" --exclude-glob "*.log" \
"$REMOTE_DIR" "$LOCAL_DIR"
quit
EOF
if (( $? == 0 ));
then
echo "$(date '+%F %T') 备份完成:$LOCAL_DIR"
else
echo "$(date '+%F %T') 备份失败,请检查日志:$LOG_FILE"
exit 1
fi
- 示例 B 将本地备份文件推送到 FTP(适合先本地打包再上传)
#!/usr/bin/env bash
set -Eeuo pipefail
FTP_HOST="ftp.example.com"
FTP_USER="ftpuser"
FTP_PASS="ftppass"
FTP_DIR="/backup_remote"
LOCAL_FILE="/backup/ftp_data_$(date +%F_%H%M%S).tar.gz"
LOG_FILE="/var/log/ftp_backup.log"
mkdir -p "$(dirname "$LOCAL_FILE")"
exec >
>
"$LOG_FILE" 2>
&
1
echo "=== $(date '+%F %T') 开始上传 ==="
# 先本地打包(示例:备份 /home/ftpuser 目录)
tar czf "$LOCAL_FILE" -C /home/ftpuser .
# 上传到 FTP
lftp -u "$FTP_USER,$PASS" "$FTP_HOST" <
<
EOF
cd "$FTP_DIR"
put "$LOCAL_FILE"
quit
EOF
if (( $? == 0 ));
then
echo "$(date '+%F %T') 上传完成:$LOCAL_FILE ->
$FTP_DIR"
else
echo "$(date '+%F %T') 上传失败"
exit 1
fi
- 赋权与校验:
- chmod +x /usr/local/bin/ftp_backup.sh
- 手动执行一次以验证:/usr/local/bin/ftp_backup.sh
四 定时执行与看护
- 使用 cron 定时(示例:每天 02:00 执行)
- 编辑当前用户计划任务:crontab -e
- 添加:0 2 * * * /usr/local/bin/ftp_backup.sh
- 如需系统级任务,可编辑 /etc/crontab(注意字段中包含用户列)。
- 日志与审计:
- 查看 cron 执行记录:sudo tail -f /var/log/cron.log(如未启用,可在 /etc/rsyslog.d/50-default.conf 中取消注释 cron. /var/log/cron.log* 并重启 rsyslog)。
- 可选 systemd 看护(示例)
- 创建服务:/etc/systemd/system/ftp-backup.service
[Unit] Description=FTP Backup Service After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/ftp_backup.sh User=root StandardOutput=journal StandardError=journal - 创建定时器:/etc/systemd/system/ftp-backup.timer
[Unit] Description=Daily FTP Backup Timer Requires=ftp-backup.service [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target - 启用:sudo systemctl daemon-reload & & sudo systemctl enable --now ftp-backup.timer
- 查看状态:systemctl list-timers
- 创建服务:/etc/systemd/system/ftp-backup.service
五 安全与维护建议
- 凭据安全:避免在脚本中明文写密码,优先使用 ~/.netrc(权限 600)、lftp 的 ~/.lftprc,或改用 SFTP/密钥认证;必要时为 FTP 启用 TLS/SSL(FTPS)。
- 保留策略:定期清理旧备份(示例:保留最近 7 天)
- 在脚本尾部加入:find /backup -name “backup_*.tar.gz” -mtime +7 -delete
- 校验与恢复演练:定期校验备份完整性与可恢复性(如抽样解压、校验和),并进行恢复演练。
- 传输稳定性:在 lftp mirror 中使用 –parallel、–allow-newer、以及合理的 –exclude-glob 提升效率与一致性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上实现FTP服务器自动备份
本文地址: https://pptw.com/jishu/762808.html
