网站放在云服务器,宝塔每天自动备份,想把备份包同步回家里飞牛 NAS 存档。 但是云服务器在外网、NAS 在内网,云服务器无法主动访问 NAS。 如果用 FRP 穿透、Tailscale 组网,配置复杂、隧道不稳定,还多一层安全风险。
✅ 最优思路反转一下:不让云推 NAS,让 NAS 主动拉取云服务器的备份
优势:
- ❌ 无需内网穿透、不用 FRP
- ✅ 增量 Rsync 同步,只传新增备份包,省流量
- ✅ 安全:只给 NAS 云服务器 SSH 密钥权限,不暴露 NAS 到公网
- ✅ 定时自动执行,自带日志,同步结果可追溯
前置准备
- 云服务器:SSH 放行 22 端口(安全组 + 宝塔防火墙),宝塔正常开启网站 / 数据库自动备份,备份目录
/www/backup/ - 飞牛 fnOS:开启 SSH,新建备份存放目录,路径不要中文
示例路径:/mnt/你的存储池/bt_backup/
步骤一:飞牛 NAS 生成 SSH 密钥(免密登录核心) 飞牛 SSH 终端执行:
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_bt_backup
查看公钥并复制全部内容:
cat ~/.ssh/id_bt_backup.pub
步骤二:公钥添加到云服务器 云服务器 SSH 执行,粘贴上面复制的公钥:
mkdir -p ~/.ssh
echo "粘贴你的公钥整串" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
✅ 测试免密登录(飞牛内执行)
ssh -i ~/.ssh/id_bt_backup root@云服务器IP
不需要输入密码即为成功。
步骤三:同步脚本(带日志、错误判断,直接复制)
#!/bin/bash
########################################################################
# 宝塔备份:飞牛NAS主动拉取脚本
########################################################################
# 【请修改这里】
REMOTE_USER="root"
REMOTE_HOST="你的云服务器IP"
REMOTE_PATH="/www/backup/"
LOCAL_PATH="/mnt/你的存储池/bt_backup/"
KEY_FILE="$HOME/.ssh/id_bt_backup"
LOG_FILE="/mnt/你的存储池/bt_backup/rsync_bt_backup.log"
########################################################################
echo "===== 开始同步 $(date) =====" >> $LOG_FILE
rsync -avz --delete -e "ssh -i $KEY_FILE -o StrictHostKeyChecking=no" \
$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH \
$LOCAL_PATH
RET=$?
if [ $RET -eq 0 ];then
echo "✅ 同步成功 $(date)" >> $LOG_FILE
else
echo "❌ 同步失败,返回码:$RET $(date)"
fi
# 自动清理30天前日志
find $(dirname $LOG_FILE) -name "rsync_bt_backup.log" -mtime +30 -delete
参数说明 --delete:NAS 端自动删除云服务器已经清理掉的旧备份。 👉 如果想 NAS 保留更多历史备份,删除这个参数。
步骤四:飞牛定时任务配置
- 飞牛应用中心安装【NAS 管家】→ 计划任务 → 添加自定义脚本
- 粘贴上面脚本,修改里面配置项
- Cron 时间:宝塔一般凌晨 1~3 点备份,建议设置
30 3 * * *(每日凌晨 3:30) - 执行用户:root
- 先点手动执行测试,查看日志确认同步正常
⚠️ 运维避坑清单
- 云服务器 SSH 建议关闭密码登录,仅密钥登录;安全组 SSH 端口限制家庭出口 IP
- 上行带宽是瓶颈,大备份包尽量凌晨同步
- 定期恢复测试:拿 NAS 上的备份包上传回宝塔测试恢复,防止备份包损坏
- 云服务器更换公网 IP 后,同步修改脚本内 IP 地址
苏ICP备2026059880号
苏公网安备32050602014591号