在 OpenWrt 上实现自动备份配置、通过 Rsync 同步到 NAS 并执行旧备份清理。 ### 准备工作 安装必要的软件,并且配置免密登录 NAS。默认 ssh 使用 dropbear,存在一些兼容性问题,安装 `openssh-client` 替代。 ```bash opkg update opkg install rsync openssh-client openssh-client-utils ``` 使用 `ssh-keygen` 创建密钥,并将公钥添加到 NAS 上的 `~/.ssh/authorized_keys` 中。 ```bash ssh-keygen -t rsa -b 2048 -f /root/.ssh/id_rsa -N "" ``` **OpenWrt 不支持 `ssh-copy-id`,因此必须手动将公钥复制添加到 NAS。** ## 编写备份脚本 创建一个脚本文件,例如 `/root/backup.sh`,添加以下内容,根据事情情况修改部分配置内容。 执行此脚本会进行本地备份到一个临时文件,然后通过 Rsync 将备份文件发送到远程服务器, 并对远程服务器上的备份文件进行清理,删除超过一个月的备份文件。最后删除本地临时备份文件。 ```bash #!/bin/sh SSH_USER="admin" SSH_IP="192.168.1.100" SSH_DIR="/volume1/backups/openwrt" SSH_PORT="22" SSH_KEY="/root/.ssh/id_rsa" LOCAL_TMP="/tmp" HOSTNAME=$(cat /proc/sys/kernel/hostname) DATE=$(date +%Y-%m-%d) BACKUP_FILE="backup-${HOSTNAME}-${DATE}.tar.gz" echo "[$(date)] Starting backup task..." echo "Creating local backup: ${LOCAL_TMP}/${BACKUP_FILE}" sysupgrade -b "${LOCAL_TMP}/${BACKUP_FILE}" if [ $? -eq 0 ]; then echo "Backup Sucessful!" else echo "Backup Failure!" exit 1 fi echo "Sending to (${SSH_IP})..." rsync -avz --timeout=60 -e "ssh -p ${SSH_PORT} -i ${SSH_KEY} -o StrictHostKeyChecking=no" \ "${LOCAL_TMP}/${BACKUP_FILE}" \ "${SSH_USER}@${SSH_IP}:${SSH_DIR}/" if [ $? -eq 0 ]; then echo "Rsync Sucessful!" else echo "Error:Rsync error!Please check your network/ssh configuration" rm -f "${LOCAL_TMP}/${BACKUP_FILE}" exit 1 fi echo "Cleanup old backup files..." ssh -p ${SSH_PORT} -i ${SSH_KEY} "${SSH_USER}@${SSH_IP}" \ "find ${SSH_DIR} -name 'backup-${HOSTNAME}-*.tar.gz' -mtime +30 -delete" echo "Cleanup temp files..." rm -f "${LOCAL_TMP}/${BACKUP_FILE}" echo "[$(date)] Complete backup task" ``` 给脚本添加执行权限,测试运行。 ```bash chmod +x /root/backup.sh /root/backup.sh ``` ### 配置定时任务 可以在 LuCI 菜单 系统 计划任务中添加,或者运行 `crontab -e` 在命令行编辑,添加以下内容,在每天 3:00 执行备份脚本。 ```bash 0 3 * * * /root/backup.sh > /dev/null 2>&1 ``` 如果没有生效的话,重启 Cron 服务 `/etc/init.d/cron restart`。 Loading... 在 OpenWrt 上实现自动备份配置、通过 Rsync 同步到 NAS 并执行旧备份清理。 ### 准备工作 安装必要的软件,并且配置免密登录 NAS。默认 ssh 使用 dropbear,存在一些兼容性问题,安装 `openssh-client` 替代。 ```bash opkg update opkg install rsync openssh-client openssh-client-utils ``` 使用 `ssh-keygen` 创建密钥,并将公钥添加到 NAS 上的 `~/.ssh/authorized_keys` 中。 ```bash ssh-keygen -t rsa -b 2048 -f /root/.ssh/id_rsa -N "" ``` **OpenWrt 不支持 `ssh-copy-id`,因此必须手动将公钥复制添加到 NAS。** ## 编写备份脚本 创建一个脚本文件,例如 `/root/backup.sh`,添加以下内容,根据事情情况修改部分配置内容。 执行此脚本会进行本地备份到一个临时文件,然后通过 Rsync 将备份文件发送到远程服务器, 并对远程服务器上的备份文件进行清理,删除超过一个月的备份文件。最后删除本地临时备份文件。 ```bash #!/bin/sh SSH_USER="admin" SSH_IP="192.168.1.100" SSH_DIR="/volume1/backups/openwrt" SSH_PORT="22" SSH_KEY="/root/.ssh/id_rsa" LOCAL_TMP="/tmp" HOSTNAME=$(cat /proc/sys/kernel/hostname) DATE=$(date +%Y-%m-%d) BACKUP_FILE="backup-${HOSTNAME}-${DATE}.tar.gz" echo "[$(date)] Starting backup task..." echo "Creating local backup: ${LOCAL_TMP}/${BACKUP_FILE}" sysupgrade -b "${LOCAL_TMP}/${BACKUP_FILE}" if [ $? -eq 0 ]; then echo "Backup Sucessful!" else echo "Backup Failure!" exit 1 fi echo "Sending to (${SSH_IP})..." rsync -avz --timeout=60 -e "ssh -p ${SSH_PORT} -i ${SSH_KEY} -o StrictHostKeyChecking=no" \ "${LOCAL_TMP}/${BACKUP_FILE}" \ "${SSH_USER}@${SSH_IP}:${SSH_DIR}/" if [ $? -eq 0 ]; then echo "Rsync Sucessful!" else echo "Error:Rsync error!Please check your network/ssh configuration" rm -f "${LOCAL_TMP}/${BACKUP_FILE}" exit 1 fi echo "Cleanup old backup files..." ssh -p ${SSH_PORT} -i ${SSH_KEY} "${SSH_USER}@${SSH_IP}" \ "find ${SSH_DIR} -name 'backup-${HOSTNAME}-*.tar.gz' -mtime +30 -delete" echo "Cleanup temp files..." rm -f "${LOCAL_TMP}/${BACKUP_FILE}" echo "[$(date)] Complete backup task" ``` 给脚本添加执行权限,测试运行。 ```bash chmod +x /root/backup.sh /root/backup.sh ``` ### 配置定时任务 可以在 LuCI 菜单 系统 计划任务中添加,或者运行 `crontab -e` 在命令行编辑,添加以下内容,在每天 3:00 执行备份脚本。 ```bash 0 3 * * * /root/backup.sh > /dev/null 2>&1 ``` 如果没有生效的话,重启 Cron 服务 `/etc/init.d/cron restart`。 最后修改:2026 年 01 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏