首页主机资讯如何在Ubuntu上实现FTP服务器自动备份

如何在Ubuntu上实现FTP服务器自动备份

时间2025-12-03 21:54:04发布访客分类主机资讯浏览1069
导读:在 Ubuntu 上实现 FTP 服务器自动备份 一 方案总览 备份方向通常有两种: 从 FTP 服务器拉取数据到本地归档(推荐用 lftp mirror 做增量同步)。 将本地生成的备份文件推送到 FTP 服务器(可用 lftp pu...

在 Ubuntu 上实现 FTP 服务器自动备份

一 方案总览

  • 备份方向通常有两种:
    • 从 FTP 服务器拉取数据到本地归档(推荐用 lftp mirror 做增量同步)。
    • 将本地生成的备份文件推送到 FTP 服务器(可用 lftp putftp 客户端)。
  • 定时执行采用 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

五 安全与维护建议

  • 凭据安全:避免在脚本中明文写密码,优先使用 ~/.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
怎样在Ubuntu上配置FTP服务器SSL加密 Ubuntu FTP Server与SFTP有何区别

游客 回复需填写必要信息