Loading... ## 设置无密码登录 ### 创建SSH密钥 ``` ssh-keygen -t rsa -b 2048 ``` ### 复制SSH密钥到主机 ``` ssh-copy-id root@主DNS的IP地址 ``` ## 设置更新脚本 /etc/smartdns/update\_config.sh 注意,有些文件没有的就修改:`FILES`变量即可 ``` #!/bin/bash # 远程机器的 IP 地址 REMOTE_IP="xxx.xxx.xxx.xxx" # 配置文件列表 FILES=( "/etc/smartdns/smartdns.conf" "/etc/smartdns/gfwlist.conf" "/etc/smartdns/gfwlist.sh" "/etc/smartdns/local-list.conf" "/etc/smartdns/oversea-list.conf" ) LOCAL_DIR="/etc/smartdns" # 本地文件路径 BACKUP_DIR="/etc/smartdns/backup" # 备份目录 WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx" # 创建备份目录(如果不存在的话) mkdir -p "$BACKUP_DIR" # 函数:发送企业微信报警推送 send_wechat_alert() { local title="$1" local message="$2" curl -X POST "$WEBHOOK_URL" -H 'Content-Type: application/json' -d '{ "msgtype": "text", "text": { "content": "'"${title}"'\n'"${message}"'" } }' } # 循环处理每个文件 for REMOTE_FILE in "${FILES[@]}"; do # 获取文件名 FILE_NAME=$(basename "$REMOTE_FILE") LOCAL_FILE="$LOCAL_DIR/$FILE_NAME" # 本地文件路径 # 使用 SCP 复制远程文件到临时文件 TEMP_FILE=$(mktemp) scp root@$REMOTE_IP:$REMOTE_FILE "$TEMP_FILE" # 检查文件是否成功复制 if [ $? -ne 0 ]; then echo "$FILE_NAME 配置文件复制失败!" send_wechat_alert "$FILE_NAME 更新失败" "从 $REMOTE_IP 更新 $REMOTE_FILE 失败,请检查!" continue fi # 判断本地文件和临时文件是否一致 if diff -q "$LOCAL_FILE" "$TEMP_FILE" > /dev/null; then echo "$FILE_NAME 本地配置文件与远程文件一致,无需更新。" rm -f "$TEMP_FILE" # 删除临时文件 else echo "$FILE_NAME 本地配置文件与远程文件不一致,进行更新..." # 备份本地配置文件,使用时间戳作为后缀 if [ -f "$LOCAL_FILE" ]; then TIMESTAMP=$(date +"%Y%m%d_%H%M%S") cp "$LOCAL_FILE" "$BACKUP_DIR/${FILE_NAME}.$TIMESTAMP" echo "备份本地配置文件到 $BACKUP_DIR/${FILE_NAME}.$TIMESTAMP" fi # 更新本地配置文件 mv "$TEMP_FILE" "$LOCAL_FILE" # 删除超过 7 天的备份 find "$BACKUP_DIR" -name "${FILE_NAME}.*" -type f -mtime +7 -exec rm -f {} \; echo "已删除超过 7 天的备份文件" # 重启 smartdns 服务 sudo systemctl restart smartdns echo "$FILE_NAME 配置文件已更新并重启 smartdns 服务。" # 发送成功通知 send_wechat_alert "$FILE_NAME 更新成功" "$FILE_NAME 从 $REMOTE_IP 更新成功。" fi done ``` 修改脚本中的当前**实例的IP地址** ## 赋权 ``` chmod +x update_config.sh ``` ## 设置定时任务 ``` crontab -e ``` 然后添加以下行以每 10 分钟执行一次脚本: ``` */10 * * * * /etc/smartdns/update_config.sh ``` 最后修改:2024 年 10 月 08 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏