ubuntu

Ubuntu FTP Server如何配置自动备份

小樊
39
2025-12-15 06:29:51
栏目: 智能运维

Ubuntu FTP Server 自动备份方案

一 备份策略与准备

二 方案一 本机打包 + 定时上传到远程 FTP/FTPS(适合已有 FTP 服务)

#!/usr/bin/env bash
set -Eeuo pipefail

# 配置
FTP_HOST="ftp.example.com"
FTP_USER="backup"
FTP_PASS="YourStrongPass!"
FTP_REMOTE_DIR="/backups/ftpdata"
LOCAL_BACKUP_DIR="/backup/ftp"
DATE=$(date +%F_%H-%M-%S)
TAR_FILE="$LOCAL_BACKUP_DIR/ftpdata_$DATE.tar.gz"
LOG_FILE="/var/log/ftp_backup.log"

# 初始化
mkdir -p "$LOCAL_BACKUP_DIR"
exec >>"$LOG_FILE" 2>&1

# 1) 本地打包
echo "[$DATE] 开始打包 $FTP_REMOTE_DIR -> $TAR_FILE"
tar czf "$TAR_FILE" -C "$(dirname "$FTP_REMOTE_DIR")" "$(basename "$FTP_REMOTE_DIR")"

# 2) 增量上传到 FTP/FTPS(mirror 反向:本地->远程)
echo "[$DATE] 开始上传到 $FTP_HOST:$FTP_REMOTE_DIR"
lftp -e "
  set ftp:ssl-force true;
  set ftp:ssl-protect-data true;
  open -u $FTP_USER,$FTP_PASS $FTP_HOST;
  mirror --reverse --delete --verbose --parallel=4 --allow-newer '$LOCAL_BACKUP_DIR/' '$FTP_REMOTE_DIR/';
  bye
"

# 3) 清理旧备份(保留最近7天)
find "$LOCAL_BACKUP_DIR" -name 'ftpdata_*.tar.gz' -mtime +7 -delete
echo "[$DATE] 完成,保留最近7天备份。"

三 方案二 从 FTP/FTPS 拉取数据到本机(适合无本机写权限或仅能被动拉取的场景)

#!/usr/bin/env bash
set -Eeuo pipefail

FTP_HOST="ftp.example.com"
FTP_USER="backup"
FTP_PASS="YourStrongPass!"
FTP_REMOTE_DIR="/data"
LOCAL_BACKUP_DIR="/backup/ftp_pull"
DATE=$(date +%F_%H-%M-%S)
LOG_FILE="/var/log/ftp_pull_backup.log"

mkdir -p "$LOCAL_BACKUP_DIR"
exec >>"$LOG_FILE" 2>&1

echo "[$DATE] 开始从 $FTP_HOST 拉取 $FTP_REMOTE_DIR -> $LOCAL_BACKUP_DIR"
lftp -e "
  set ftp:ssl-force true;
  set ftp:ssl-protect-data true;
  open -u $FTP_USER,$FTP_PASS $FTP_HOST;
  mirror --delete --verbose --parallel=4 --allow-newer '$FTP_REMOTE_DIR/' '$LOCAL_BACKUP_DIR/';
  bye
"

# 可选:本地保留策略
find "$LOCAL_BACKUP_DIR" -mindepth 1 -mtime +7 -delete
echo "[$DATE] 拉取完成,保留最近7天。"

四 仅备份 FTP 服务器配置与用户数据(轻量且常备)

#!/usr/bin/env bash
set -Eeuo pipefail
DATE=$(date +%F)
OUT="/backup/vsftpd_conf_$DATE.tar.gz"
LOG="/var/log/vsftpd_backup.log"

exec >>"$LOG" 2>&1
echo "[$DATE] 备份 vsftpd 配置 -> $OUT"

tar czf "$OUT" -C /etc vsftpd /etc/vsftpd.* /etc/pam.d/vsftpd 2>/dev/null || true
chmod 600 "$OUT"

# 保留最近7天
find /backup -name 'vsftpd_conf_*.tar.gz' -mtime +7 -delete
echo "[$DATE] 完成。"
#!/usr/bin/env bash
set -Eeuo pipefail
DATE=$(date +%F)
OUT="/backup/ftp_data_$DATE.tar.gz"
LOG="/var/log/ftp_data_backup.log"

exec >>"$LOG" 2>&1
echo "[$DATE] 备份 FTP 数据 -> $OUT"

tar czf "$OUT" -C /var/ftp . 2>/dev/null || true
chmod 600 "$OUT"

find /backup -name 'ftp_data_*.tar.gz' -mtime +7 -delete
echo "[$DATE] 完成。"

五 安全加固与运维要点

0
看了该问题的人还看了