温馨提示×

Ubuntu SFTP服务器如何备份数据

小樊
39
2025-12-11 03:57:17
栏目: 云计算

Ubuntu SFTP服务器备份方案

一 备份目标与总体思路

  • 备份对象应包含:用户数据目录(如 /home/ 或 SFTP 根目录)、/etc/ssh/ 配置、以及必要的用户与权限信息。这样既能恢复文件,也能快速重建 SFTP 访问。对于使用 SFTPGo 的场景,还需备份其数据卷与数据库(如启用)。
  • 推荐策略:采用 rsync over SSH 做增量同步,配合 cron 定时;如需离线归档或跨公网传输,先打包再传输;对关键数据再做一份异地/对象存储的离线或增量备份(如 restic)。

二 方案一 使用 rsync 增量同步到备份机(推荐)

  • 适用:你有一台“备份机”(可以是本机外另一台服务器或本机其他磁盘),希望持续、增量地拉取 SFTP 数据。
  • 步骤:
    1. 在备份机上安装 rsync(通常已预装):sudo apt update && sudo apt install -y rsync
    2. 手动首次全量同步(示例把远程 SFTP 根目录同步到本地 /backup/sftp):
      rsync -a -v -z --delete -e ssh sftpuser@your_server_ip:/home/sftpuser/ /backup/sftp/
      说明:-a 归档模式(保留权限/属主/时间)、-v 详细、-z 压缩传输、–delete 保持两端一致(谨慎使用)。
    3. 加入定时任务(每天 02:00 增量同步):
      crontab -e
      0 2 * * * rsync -a -v -z --delete -e ssh sftpuser@your_server_ip:/home/sftpuser/ /backup/sftp/ >> /var/log/sftp_backup.log 2>&1
    4. 如需备份 SSH 配置与用户环境:
      rsync -a -v /etc/ssh/ backup-server:/backup/etc/ssh/
  • 提示:若 SFTP 启用了 Chroot,请确保备份用户对上层目录有读取权限(常见做法是仅备份其可访问的根目录,而非整盘)。

三 方案二 使用 SFTP 客户端脚本自动化备份(适合无 rsync 场景)

  • 适用:只能使用 SFTP 协议(例如仅开放 22 端口且不允许 shell 登录),可用脚本自动化下载。
  • 方式 A(lftp,支持密码明文在脚本中):
    1. 安装 lftp:sudo apt install -y lftp
    2. 备份脚本 backup_sftp.sh(示例把远程目录打包后下载):
      #!/usr/bin/env bash
      HOST=“your_server_ip”
      PORT=“22”
      USER=“sftpuser”
      PASS=“YourPassword”
      REMOTE_DIR=“/home/sftpuser/data”
      LOCAL_DIR=“/backup/sftp”
      DATE=$(date +%F_%H%M%S)
      mkdir -p “$LOCAL_DIR”
      sshpass -p “$PASS” ssh -o StrictHostKeyChecking=no “$USER@$HOST” “tar czf - -C ‘$REMOTE_DIR’ .” > “$LOCAL_DIR/backup_$DATE.tar.gz”
      echo “Saved $LOCAL_DIR/backup_$DATE.tar.gz”
    3. 赋权并加入 cron(每天 01:00 执行):
      chmod +x backup_sftp.sh
      crontab -e
      0 1 * * * /path/backup_sftp.sh >> /var/log/sftp_backup.log 2>&1
  • 方式 B(原生 sftp + 批处理文件,避免明文密码):
    1. 生成密钥并在 SFTP 服务器上部署公钥(推荐);
    2. 创建批处理文件 sftp_batch.txt:
      cd /home/sftpuser/data
      lcd /backup/sftp
      get -r .
    3. 在 crontab 中调用:
      0 1 * * * sftp -b /path/sftp_batch.txt -P 22 sftpuser@your_server_ip >> /var/log/sftp_backup.log 2>&1
  • 说明:若服务器做了 Chroot,批处理中的 lcd/cd 应限制在用户根目录内。

四 方案三 容器化 SFTPGo 的备份要点

  • 适用:你使用 SFTPGo(Docker 部署),数据可能位于绑定卷或对象存储。
  • 步骤:
    1. 备份数据卷与配置:

      假设数据卷挂载在 /data/sftpgo

      rsync -a -v /data/sftpgo/ backup-server:/backup/sftpgo/

      若使用外部数据库(如 SQLite/PostgreSQL),一并备份数据库文件或导出数据

    2. 如需对象存储后端,确保启用服务端加密与定期快照/版本控制;离线归档可用 restic/borg 对 /data/sftpgo 做增量备份。
    3. 恢复时按相同卷结构恢复,再启动容器即可。

五 恢复与校验建议

  • 恢复 rsync 备份:
    rsync -a -v /backup/sftp/ sftpuser@your_server_ip:/home/sftpuser/(或反向用于回灌)
  • 恢复 SSH 配置:
    rsync -a -v /backup/etc/ssh/ /etc/ssh/ && sudo systemctl restart sshd
  • 校验:
    • 文件数量/大小对比:du -sh /backup/sftp /home/sftpuser
    • 抽查关键文件权限与属主:ls -l /home/sftpuser
    • 抽样校验(重要文件):sha256sum 对比
  • 安全与合规:
    • 备份机与传输链路尽量使用 SSH 密钥,禁用口令登录;
    • 备份保留周期建议至少 7–30 天,并做 异地/离线 副本;
    • 对含敏感数据的备份启用 加密访问控制

0