Hallo,
ich hole mal etwas aus was ich vor habe und wie ich das Umsetzen möchte.
Ich habe einen kleinen PC auf dem Linux (Ubuntu) als eine Art Server laufen soll. Eine der Hauptanwendungen wird hier (APM) Application Management Panel (zum hosten von Spiele Server) sein. Damit ich auch von extern auf diesen Server immer zugreifen kann habe ich mir also eine Domain hier geordert. Da ich auch keine Statische IP habe sondern DSL, wo sich täglich die IP Adresse ändert. Wollte ich über ein Skript alle 5 Minuten abfragen ob sich die IP Adresse geändert hat und dann über die API Schnittstelle diese aktualisieren.
Folgende Probleme habe ich bis jetzt Festgestellt. Ich habe einmal per Hand die Adresse angegeben:
Wenn ich jedoch über Ubuntu eine Abfrage mache bekomm ich noch die Alteingestellte *Default IP Adresse angezeigt.
Problem Nr.1 ist also das er meine Änderung nicht übernimmt.
Problem Nr.2 ist dann die API hier habe ich mir ein PW wie Key generiert im CCP und in meinen Skript eingegeben:
#!/bin/bash
# Zugangsdaten
CUSTOMER_ID="XXXXXXX"
API_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
API_PASSWORD="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
DOMAIN="XXXXXX.XX"
HOSTNAME="@"
# IP ermitteln
CURRENT_IP=$(curl -s https://api.ipify.org)
IP_FILE="/home/balmungd/scripts/last_ip.txt"
if [[ -f "$IP_FILE" ]]; then
LAST_IP=$(cat "$IP_FILE")
else
LAST_IP=""
fi
if [[ "$CURRENT_IP" == "$LAST_IP" ]]; then
echo "[OK] Keine Änderung: $CURRENT_IP"
exit 0
fi
echo "[INFO] IP hat sich geändert: $LAST_IP → $CURRENT_IP"
# Login bei Netcup API
SESSION=$(curl -s -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php \
-H "Content-Type: application/json" \
-d "{
\"action\": \"login\",
\"param\": {
\"customerLogin\": \"$CUSTOMER_ID\",
\"apiKey\": \"$API_KEY\",
\"apiPassword\": \"$API_PASSWORD\"
}
}" | jq -r '.data.apisessionid')
if [[ "$SESSION" == "null" || -z "$SESSION" ]]; then
echo "[ERROR] Login fehlgeschlagen."
exit 1
fi
# DNS-Records abrufen
RECORDS=$(curl -s -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php \
-H "Content-Type: application/json" \
-d "{
\"action\": \"infoDnsRecords\",
\"param\": {
\"domainname\": \"$DOMAIN\",
\"apisessionid\": \"$SESSION\"
}
}")
RECORD_ID=$(echo "$RECORDS" | jq -r ".data.dnsrecords[] | select(.hostname==\"$HOSTNAME\" and .type==\"A\") | .id")
if [[ -z "$RECORD_ID" ]]; then
echo "[ERROR] Kein A-Record mit Hostname \"$HOSTNAME\" gefunden."
exit 1
fi
# A-Record aktualisieren
curl -s -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php \
-H "Content-Type: application/json" \
-d "{
\"action\": \"updateDnsRecords\",
\"param\": {
\"domainname\": \"$DOMAIN\",
\"apisessionid\": \"$SESSION\",
\"dnsrecord\": [{
\"id\": \"$RECORD_ID\",
\"hostname\": \"$HOSTNAME\",
\"type\": \"A\",
\"priority\": 0,
\"destination\": \"$CURRENT_IP\",
\"deleterecord\": false
}]
}
}" > /dev/null
echo "$CURRENT_IP" > "$IP_FILE"
echo "[SUCCESS] A-Record aktualisiert: $DOMAIN → $CURRENT_IP"
Display More
Mit Hilfe von ChatGPT hab ich die Scripts erstellt und weiter getestet komme jetzt aber nicht mehr weiter.
Ist der Skript Fehlerhaft wobei mir der Skript ja auswirft das die IP Adresse noch anders ist es hängt also am Login doch die Daten sind Richtig im Skript hinterlegt.