Blame
|
1 | # AzerothCore Server-Konsole & Admin-Zugriff |
||||||
| 2 | ||||||||
| 3 | ## Übersicht |
|||||||
| 4 | ||||||||
| 5 | Der AzerothCore-Server (CT119) hat drei Admin-Zugangswege: |
|||||||
| 6 | ||||||||
| 7 | | Methode | Zugriff | Für was | |
|||||||
| 8 | |---------|---------|---------| |
|||||||
| 9 | | **In-Game** | WoW-Client als GM-Account | Einfachste Methode für GM-Commands | |
|||||||
| 10 | | **SSH → Systemd** | `ssh root@192.168.178.89` | Logs, Service-Neustart, Config-Änderungen | |
|||||||
| 11 | | **SOAP** | `127.0.0.1:7878` (nur intern) | Automatisierung, Scripts | |
|||||||
| 12 | ||||||||
| 13 | --- |
|||||||
| 14 | ||||||||
| 15 | ## SSH-Zugang (CT119) |
|||||||
| 16 | ||||||||
| 17 | ```bash |
|||||||
| 18 | # Von Proxmox-Host: |
|||||||
| 19 | ssh root@192.168.178.89 |
|||||||
| 20 | ||||||||
| 21 | # Oder direkt per pct exec (von Proxmox): |
|||||||
| 22 | pct exec 119 -- bash -c "systemctl status acore-world" |
|||||||
| 23 | ``` |
|||||||
| 24 | ||||||||
| 25 | --- |
|||||||
| 26 | ||||||||
| 27 | ## Services verwalten |
|||||||
| 28 | ||||||||
| 29 | ```bash |
|||||||
| 30 | # Status prüfen: |
|||||||
| 31 | systemctl status acore-auth |
|||||||
| 32 | systemctl status acore-world |
|||||||
| 33 | ||||||||
| 34 | # Neustarten: |
|||||||
| 35 | systemctl restart acore-auth |
|||||||
| 36 | systemctl restart acore-world |
|||||||
| 37 | ||||||||
| 38 | # Stoppen / Starten: |
|||||||
| 39 | systemctl stop acore-world |
|||||||
| 40 | systemctl start acore-world |
|||||||
| 41 | ``` |
|||||||
| 42 | ||||||||
| 43 | > **Reihenfolge:** Bei Neustart zuerst `acore-world` stoppen, dann `acore-auth`. Starten in umgekehrter Reihenfolge. |
|||||||
| 44 | ||||||||
| 45 | --- |
|||||||
| 46 | ||||||||
| 47 | ## Logs anzeigen |
|||||||
| 48 | ||||||||
| 49 | ```bash |
|||||||
| 50 | # Live-Log (Worldserver): |
|||||||
| 51 | journalctl -u acore-world -f |
|||||||
| 52 | ||||||||
| 53 | # Letzten 100 Zeilen: |
|||||||
| 54 | journalctl -u acore-world -n 100 |
|||||||
| 55 | ||||||||
| 56 | # Log-Datei direkt (schneller bei vielen Einträgen): |
|||||||
| 57 | tail -f /opt/azerothcore/logs/Server.log |
|||||||
| 58 | ||||||||
| 59 | # Fehler filtern: |
|||||||
| 60 | journalctl -u acore-world -p err -n 50 |
|||||||
| 61 | ``` |
|||||||
| 62 | ||||||||
| 63 | --- |
|||||||
| 64 | ||||||||
| 65 | ## SOAP-Interface |
|||||||
| 66 | ||||||||
| 67 | Der Worldserver stellt einen SOAP XML-RPC-Endpunkt auf `127.0.0.1:7878` bereit. |
|||||||
| 68 | Credentials = Admin-Account (Login: `admin`, PW in `/root/acore-credentials.txt`). |
|||||||
| 69 | ||||||||
| 70 | ### SOAP per PHP (einfachste Methode): |
|||||||
| 71 | ||||||||
| 72 | ```bash |
|||||||
| 73 | # In CT119 als root – beliebigen GM-Command ausführen: |
|||||||
| 74 | php -r " |
|||||||
| 75 | \$c = new SoapClient(null, [ |
|||||||
| 76 | 'location' => 'http://127.0.0.1:7878/', |
|||||||
| 77 | 'uri' => 'urn:AC', |
|||||||
| 78 | 'style' => SOAP_RPC, |
|||||||
| 79 | 'login' => 'admin', |
|||||||
| 80 | 'password' => 'ADMINPASS' |
|||||||
| 81 | ]); |
|||||||
| 82 | echo \$c->executeCommand(new SoapParam('.server info', 'command')); |
|||||||
| 83 | " |
|||||||
| 84 | ``` |
|||||||
| 85 | ||||||||
| 86 | ### SOAP per curl: |
|||||||
| 87 | ||||||||
| 88 | ```bash |
|||||||
| 89 | curl -s -u admin:ADMINPASS \ |
|||||||
| 90 | -H "Content-Type: text/xml" \ |
|||||||
| 91 | -d '<?xml version="1.0"?> |
|||||||
| 92 | <methodCall> |
|||||||
| 93 | <methodName>execute</methodName> |
|||||||
| 94 | <params> |
|||||||
| 95 | <param><value><string>.server info</string></value></param> |
|||||||
| 96 | </params> |
|||||||
| 97 | </methodCall>' \ |
|||||||
| 98 | http://127.0.0.1:7878/ |
|||||||
| 99 | ``` |
|||||||
| 100 | ||||||||
| 101 | > **Wichtig:** Der SOAP-Port ist nur auf `127.0.0.1` gebunden – kein externer Zugriff möglich. |
|||||||
| 102 | ||||||||
| 103 | --- |
|||||||
| 104 | ||||||||
| 105 | ## Direkte MySQL-Konsole |
|||||||
| 106 | ||||||||
| 107 | ```bash |
|||||||
| 108 | # In CT119 als root: |
|||||||
| 109 | mysql -u root |
|||||||
| 110 | ||||||||
| 111 | # Direkte Abfragen: |
|||||||
| 112 | USE acore_auth; |
|||||||
| 113 | SELECT username, last_login FROM account ORDER BY last_login DESC LIMIT 10; |
|||||||
| 114 | ||||||||
| 115 | USE acore_characters; |
|||||||
| 116 | SELECT name, level, class, race FROM characters WHERE online=1; |
|||||||
| 117 | ||||||||
| 118 | # Account-GM-Level setzen (direkt in DB): |
|||||||
| 119 | UPDATE acore_auth.account_access SET SecurityLevel=3 WHERE id=( |
|||||||
| 120 | SELECT id FROM acore_auth.account WHERE username='SPIELERNAME' |
|||||||
| 121 | ); |
|||||||
| 122 | ``` |
|||||||
| 123 | ||||||||
| 124 | --- |
|||||||
| 125 | ||||||||
| 126 | ## Config neu laden (ohne Neustart) |
|||||||
| 127 | ||||||||
| 128 | ```bash |
|||||||
| 129 | # In-Game oder per SOAP: |
|||||||
| 130 | .reload config # worldserver.conf neu laden |
|||||||
| 131 | .reload all # Alle Configs (langsamer) |
|||||||
| 132 | ``` |
|||||||
| 133 | ||||||||
| 134 | > **Nicht alle Einstellungen** können live neu geladen werden – XP-Rates, Bot-Anzahl und DB-Verbindungen brauchen einen Neustart. |
|||||||
| 135 | ||||||||
| 136 | --- |
|||||||
| 137 | ||||||||
| 138 | ## CPU-Last reduzieren |
|||||||
| 139 | ||||||||
| 140 | Falls der Server zu viel CPU verbraucht (häufig durch journald bei vielen Log-Einträgen): |
|||||||
| 141 | ||||||||
| 142 | ```bash |
|||||||
| 143 | # worldserver nice-Level erhöhen (niedrigere Priorität): |
|||||||
| 144 | renice 10 $(pgrep worldserver) |
|||||||
| 145 | ||||||||
| 146 | # Console-Logging in worldserver.conf reduzieren: |
|||||||
| 147 | # Logger.root = 3,Console Server → Logger.root = 2,Server |
|||||||
| 148 | # Dann: systemctl restart acore-world |
|||||||
| 149 | ``` |
|||||||
| 150 | ||||||||
| 151 | --- |
|||||||
| 152 | ||||||||
| 153 | ## Passwort ändern |
|||||||
| 154 | ||||||||
| 155 | Für den Admin-Account nutzt AzerothCore **SHA1 SRP6** (WotLK-kompatibel). |
|||||||
| 156 | ||||||||
| 157 | ### Über SOAP (funktioniert NUR ohne `"` im Passwort): |
|||||||
| 158 | ||||||||
| 159 | ```bash |
|||||||
| 160 | php -r " |
|||||||
| 161 | \$c = new SoapClient(null, ['location'=>'http://127.0.0.1:7878/','uri'=>'urn:AC','style'=>SOAP_RPC,'login'=>'admin','password'=>'ALTESPASSWORT']); |
|||||||
| 162 | echo \$c->executeCommand(new SoapParam('.account set password admin ALTESPASSWORT NEUESPASSWORT NEUESPASSWORT', 'command')); |
|||||||
| 163 | " |
|||||||
| 164 | ``` |
|||||||
| 165 | ||||||||
| 166 | ### Direkt per Python (wenn Sonderzeichen im PW): |
|||||||
| 167 | ||||||||
| 168 | ```python |
|||||||
| 169 | #!/usr/bin/env python3 |
|||||||
| 170 | import hashlib, os, struct |
|||||||
| 171 | ||||||||
| 172 | username = "ADMIN" # Immer UPPERCASE |
|||||||
| 173 | password = "NEUESPASSWORT" # Immer UPPERCASE |
|||||||
| 174 | ||||||||
| 175 | N = int.from_bytes(bytes.fromhex( |
|||||||
| 176 | '894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7'), 'big') |
|||||||
| 177 | g = 7 |
|||||||
| 178 | ||||||||
| 179 | salt_bytes = os.urandom(32) |
|||||||
| 180 | h1 = hashlib.sha1((username.upper() + ':' + password.upper()).encode()).digest() |
|||||||
| 181 | x_bytes = hashlib.sha1(salt_bytes + h1).digest() |
|||||||
| 182 | x = int.from_bytes(x_bytes, 'little') |
|||||||
| 183 | verifier = pow(g, x, N).to_bytes(32, 'little') |
|||||||
| 184 | ||||||||
| 185 | salt_hex = salt_bytes.hex().upper() |
|||||||
| 186 | verifier_hex = verifier.hex().upper() |
|||||||
| 187 | ||||||||
| 188 | print(f"""UPDATE acore_auth.account |
|||||||
| 189 | SET salt=0x{salt_hex}, verifier=0x{verifier_hex} |
|||||||
| 190 | WHERE username='{username}';""") |
|||||||
| 191 | ``` |
|||||||
| 192 | ||||||||
| 193 | ```bash |
|||||||
| 194 | python3 srp6_pass.py | mysql -u root |
|||||||
| 195 | ``` |
|||||||
| 196 | ||||||||
| 197 | > Danach auch SOAP-Passwort in FusionCMS-DB aktualisieren: |
|||||||
| 198 | > ```sql |
|||||||
| 199 | > mysql -u root fusioncms -e "UPDATE realms SET console_password='NEUESPASSWORT' WHERE id=1;" |
|||||||
| 200 | > ``` |
|||||||
| 201 | ||||||||
| 202 | --- |
|||||||
| 203 | ||||||||
| 204 | ## FusionCMS Web-Panel |
|||||||
| 205 | ||||||||
| 206 | - **URL:** https://panel.ls-cloud.biz |
|||||||
| 207 | - **Login:** `admin` / Passwort aus `/root/acore-credentials.txt` |
|||||||
| 208 | - **GM-Commands über FusionCMS:** Nur vordefinierte Aktionen (Kick, Ban, Item senden) — **kein freies Command-Eingabefeld!** |
|||||||
| 209 | ||||||||
| 210 | Das Panel nutzt SOAP intern. SOAP-Credentials entsprechen dem Admin-Account. |
|||||||
| 211 | ||||||||
| 212 | --- |
|||||||
| 213 | ||||||||
| 214 | ## Verwandte Seiten |
|||||||
| 215 | ||||||||
| 216 | - [[azerothcore]] – Installation, Config-Pfade, XP-Rates |
|||||||
| 217 | - [[gm-commands]] – Vollständige GM-Command-Referenz |
|||||||
| 218 | - [[home]] |
|||||||
