碎
访客
碎银几两

碎银几两

人间烟火 · 技术研习 · 个人随笔
返回文章列表

宝塔云服务器备份自动同步飞牛 NAS|NAS 主动拉取方案,无需内网穿透

技术

宝塔备份同步到飞牛NAS方法.jpg

网站放在云服务器,宝塔每天自动备份,想把备份包同步回家里飞牛 NAS 存档。 但是云服务器在外网、NAS 在内网,云服务器无法主动访问 NAS。 如果用 FRP 穿透、Tailscale 组网,配置复杂、隧道不稳定,还多一层安全风险。

✅ 最优思路反转一下:不让云推 NAS,让 NAS 主动拉取云服务器的备份
优势:

  • ❌ 无需内网穿透、不用 FRP
  • ✅ 增量 Rsync 同步,只传新增备份包,省流量
  • ✅ 安全:只给 NAS 云服务器 SSH 密钥权限,不暴露 NAS 到公网
  • ✅ 定时自动执行,自带日志,同步结果可追溯
前置准备
  1. 云服务器:SSH 放行 22 端口(安全组 + 宝塔防火墙),宝塔正常开启网站 / 数据库自动备份,备份目录 /www/backup/
  2. 飞牛 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 保留更多历史备份,删除这个参数。
步骤四:飞牛定时任务配置
  1. 飞牛应用中心安装【NAS 管家】→ 计划任务 → 添加自定义脚本
  2. 粘贴上面脚本,修改里面配置项
  3. Cron 时间:宝塔一般凌晨 1~3 点备份,建议设置 30 3 * * *(每日凌晨 3:30)
  4. 执行用户:root
  5. 先点手动执行测试,查看日志确认同步正常
⚠️ 运维避坑清单
  1. 云服务器 SSH 建议关闭密码登录,仅密钥登录;安全组 SSH 端口限制家庭出口 IP
  2. 上行带宽是瓶颈,大备份包尽量凌晨同步
  3. 定期恢复测试:拿 NAS 上的备份包上传回宝塔测试恢复,防止备份包损坏
  4. 云服务器更换公网 IP 后,同步修改脚本内 IP 地址