在 Linux 上备份 SFTP 数据,通常就是备份 SFTP 用户可访问的文件目录,并结合权限、用户配置一起考虑。下面从常见场景到具体做法给你一个完整方案。
SFTP 本身只是文件传输协议,数据实际存储在服务器磁盘上。
常见位置:
/home/用户名//data/sftp/用户名//srv/sftp/)先确认目录:
grep sftp /etc/passwd
或查看 SSH 配置:
grep -R "ChrootDirectory" /etc/ssh/
rsync -avz /data/sftp/ /backup/sftp_$(date +%F)/
说明:
-a:保留权限、时间、软链接-v:显示过程-z:压缩(本地可省略)✅ 适合:磁盘备份、快速恢复
rsync -avz /data/sftp/ user@backup-server:/backup/sftp/
或使用 SSH 指定端口:
rsync -avz -e "ssh -p 2222" /data/sftp/ user@backup-server:/backup/sftp/
✅ 适合:异地容灾
scp -r /data/sftp/ user@backup-server:/backup/
⚠️ 缺点:
tar -czvf sftp_backup_$(date +%F).tar.gz /data/sftp/
恢复:
tar -xzvf sftp_backup_2026-01-21.tar.gz -C /
✅ 适合:定期归档、离线存储
rsync 默认已保留,但确保不是 root → 非 root 再写回。
rsync -avzX /data/sftp/ /backup/sftp/
cp /etc/ssh/sshd_config /backup/sshd_config
getent passwd > /backup/passwd.bak
getent group > /backup/group.bak
如果是 SFTP-only 用户(nologin):
grep '/sbin/nologin' /etc/passwd
crontab -e
每天凌晨 2 点备份:
0 2 * * * rsync -avz /data/sftp/ /backup/sftp_$(date +\%F)/
✅ 备份目录权限:
chmod 700 /backup
✅ 备份服务器不要开放 SFTP 给普通用户
✅ 备份完成后校验:
rsync -avnc /data/sftp/ /backup/sftp/
❌ 只备份 /home,但 SFTP 实际在 /data/sftp
❌ 忘记备份权限,恢复后无法登录
❌ 使用 root 备份但恢复时权限错乱
| 场景 | 方案 |
|---|---|
| 日常备份 | rsync |
| 异地容灾 | rsync over SSH |
| 归档 | tar.gz |
| 自动化 | cron + rsync |
如果你愿意,可以告诉我:
我可以帮你写一套可直接用的备份脚本。