温馨提示×

centos sftp如何进行数据备份恢复

小樊
32
2025-12-17 13:24:02
栏目: 智能运维

CentOS 下使用 SFTP 进行数据备份与恢复

一 场景与准备

  • 适用对象:以 OpenSSH 的 SFTP 为传输通道,将本地或远端目录的数据做周期性备份,并在需要时恢复到本地或远端。
  • 前置条件:
    • 确认 sshd 已安装并运行:sudo systemctl start sshd && sudo systemctl enable sshd
    • 防火墙放行 22/TCPsudo firewall-cmd --permanent --add-port 22/tcp && sudo firewall-cmd --reload
    • 建议启用 公钥认证 以便自动化;如用密码,可借助 lftpexpect 实现非交互登录(见下文脚本示例)。

二 备份与恢复方法

  • 方法一 使用 SCP 或 SFTP 手工/脚本传输
    • 备份(本地→远端 SFTP):scp -r /path/to/local/dir user@remote:/path/to/remote/dir
    • 恢复(远端→本地):scp -r user@remote:/path/to/remote/dir /path/to/local/dir
    • 交互式 SFTP:sftp user@remote,用 put/get 上传/下载。
    • 适用:临时操作、一次性迁移、小规模目录。
  • 方法二 使用 rsync 增量备份(推荐)
    • 备份(本地→远端):rsync -avz --delete -e ssh /path/to/local/ user@remote:/path/to/remote/
    • 恢复(远端→本地):rsync -avz --delete -e ssh user@remote:/path/to/remote/ /path/to/local/
    • 特点:仅传输差异、断点续传、可校验一致性,适合日常增量备份与快速回滚。
  • 方法三 打包归档后传输(适合离线/归档)
    • 备份:tar -czvf backup_$(date +%F).tar.gz /path/to/dir
    • 传输:scp backup_*.tar.gz user@remote:/backup/
    • 恢复:tar -xzvf backup_*.tar.gz -C /restore/dir
    • 适用:需要压缩归档、跨环境迁移或长期留存。

三 自动化与定时任务

  • 公钥免密登录(便于定时任务)
    • 本地生成密钥:ssh-keygen -t rsa -b 2048
    • 将公钥拷贝到远端:ssh-copy-id user@remote
  • 定时备份脚本示例(rsync 增量)
    • 备份脚本 /usr/local/bin/backup_sftp.sh
      #!/bin/bash
      SRC="/data"
      DST="user@remote:/backup/data_$(date +%F)"
      LOG="/var/log/sftp_backup.log"
      
      rsync -avz --delete -e ssh "$SRC/" "$DST" >> "$LOG" 2>&1
      echo "Backup finished at $(date)" >> "$LOG"
      
    • 赋权与定时:
      chmod +x /usr/local/bin/backup_sftp.sh
      sudo crontab -e
      # 每天 02:00 执行
      0 2 * * * /usr/local/bin/backup_sftp.sh
      
  • 如需密码自动化的替代方案(不建议明文密码,优先用公钥)
    • 使用 lftp 的 sftp 协议批量上传/下载(适合脚本化,但需妥善管理凭据)。

四 迁移 SFTP 服务器与目录权限要点

  • 数据备份:打包用户数据目录(如 /home)与关键配置(如 /etc/ssh/sshd_config
    • sudo tar -czvf /backup/home_$(date +%F).tar.gz /home
    • sudo cp /etc/ssh/sshd_config /backup/sshd_config_$(date +%F).bak
  • 在新服务器恢复数据与配置并重启服务
    • sudo tar -xzvf /backup/home_*.tar.gz -C /
    • sudo cp /backup/sshd_config_*.bak /etc/ssh/sshd_config
    • sudo systemctl restart sshd
  • 目录权限与 SFTP Chroot 常见要求
    • Chroot 根目录(如 /home/username)及其上级目录通常需由 root 拥有,权限 755;用户家目录由用户拥有,权限 700/755(视策略而定),否则 internal-sftp 可能拒绝登录。
    • 示例(创建仅供 SFTP 的用户):
      sudo groupadd sftpusers
      sudo useradd -m -G sftpusers sftpuser
      sudo passwd sftpuser
      # 建议:/home/sftpuser 755 root:root;/home/sftpuser/files 700 sftpuser:sftpuser
      
    • 修改 /etc/ssh/sshd_config(片段):
      Subsystem sftp internal-sftp
      Match Group sftpusers
          ChrootDirectory %h
          ForceCommand internal-sftp
          AllowTcpForwarding no
          X11Forwarding no
      
    • 修改后重启:sudo systemctl restart sshd

五 常见问题快速排查

  • 无法连接:检查 sshd 状态 systemctl status sshd,确保 22/TCP 放行,必要时查看日志 journalctl -u sshd/var/log/secure
  • SFTP 子系统配置:确认 /etc/ssh/sshd_configSubsystem sftp internal-sftp 或指向正确的 sftp-server 路径,修改后重启 sshd
  • 权限问题:Chroot 根目录及上级目录需 root:root 755;用户目录由用户拥有且权限合理,否则 internal-sftp 会拒绝访问。
  • 自动化失败:优先使用 SSH 公钥;若必须用密码,脚本可用 lftpexpect,并确保凭据安全存储。

0