Adguard Sync Konfiguration

Als erstes erstellen wir dafür einen Schlüssel

ssh-keygen -t rsa

Für meine Homelab verwende ich kein extra Passwort aus Bequemlichkeit, wäre aber sicher Sinnvoll bei Server wie vom Internet her erreichbar sind.

Der Key wird immer User Ordner unter .ssh erstellt mit eurem gewählten Namen. Eine ohne Endung und der andere mit .pub Endung.

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.41

Wenn ihr mehrere SSH Keys habe müsst ihr für jeden Server eure Config noch anpassen. server1 und server2 kann beliebig gewählt werden.

nano ~/.ssh/config

Host server1
  HostName SERVER1_IP_ODER_DNS
  User user1
  Port 22
  IdentityFile ~/.ssh/id_rsa_server1
  IdentitiesOnly yes

Host server2
 HostName SERVER2_IP_ODER_DNS
 User user2
 Port 22
 IdentityFile ~/.ssh/id_rsa_server2
 IdentitiesOnly yes

Danach müsst ihr noch die richtigen Rechte auf das File angewenden.

chmod 600 ~/.ssh/config

Hier ist nun das Script. Das Script updatet den Server und überprüft ob beide Versionen gleich sind. Nur wenn eure beide Instanzen von Adguard die gleiche Versionen haben werden die Datei kopiert und synchronisiert.

Unter USER und PASS müsst ihr eure Logindaten des Adguard eintragen. Unter INSTANCES werden die beiden IP der Instanzen eurer Adguard eingetragen.

#!/bin/bash

# update adguard

ssh server1 -t "/root/AdGuardHome/AdGuardHome --update"

set -euo pipefail

# Konfiguration

USER="admin"
PASS="passwort"
INSTANCES=(
  "http://192.168.11.40"
  "http://192.168.11.41"
)

REF=""
OK=true

echo "=== AdGuard Home Versionscheck (Basic Auth) ==="
for BASE in "${INSTANCES[@]}"; do
  ver=$(curl -s -u "$USER:$PASS" "$BASE/control/status" | jq -r '.version // empty')
  if [[ -z "$ver" ]]; then
    echo "❌ $BASE → keine Version erhalten"
    OK=false
  else
    echo "✅ $BASE → $ver"
    [[ -z "$REF" ]] && REF="$ver"
    [[ "$ver" != "$REF" ]] && OK=false
  fi
done

echo "=============================================="
if $OK; then
  echo "🎉 Alle Instanzen Version: $REF"
  # copy config to new path

  scp /mnt/user/appdata/adguard_home/config/AdGuardHome.yaml server1:/root/AdGuardHome/
  
  # restart adguardhome
  
  ssh server1 -t "/root/AdGuardHome/AdGuardHome -s restart"
  exit 0
else
  echo "⚠️ Unterschiede gefunden."
  exit 1
fi

Meine erste Instanz ist ein Docker und das aktualisiere ich automatisch über das GUI deshalb fehlt es hier. Falls ihr 2 Mal Adguard Home über Github installiert habt könnt ihr die erste Instanz auch hinzufügen zum updaten.

Ihr müsst die Pfade natürlich euren Bedürfnisen angepassen aber der Rest sollte ohne Probleme funktionieren.