mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-11-04 00:43:15 +00:00
39 lines
1.8 KiB
Python
39 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Ищем склеенные строки в конфигах awg на всех серверах панели.
|
|
|
|
Имена переменных в пробе латиницей: sh внутри контейнеров кириллицу не берёт.
|
|
"""
|
|
import json, sys
|
|
sys.path.insert(0, "/app")
|
|
from managers.ssh_manager import SSHManager
|
|
|
|
ПРОБА = (
|
|
"for c in amnezia-awg2 amnezia-awg amnezia-awg31 amnezia-awg3 amnezia-awg-legacy; do "
|
|
" docker ps --format '{{.Names}}' 2>/dev/null | grep -qx $c || continue; "
|
|
" for f in awg0.conf wg0.conf; do "
|
|
" p=/opt/amnezia/awg/$f; "
|
|
" docker exec $c test -f $p 2>/dev/null || continue; "
|
|
" glue=$(docker exec $c grep -c '/32\\[Peer\\]' $p 2>/dev/null || echo 0); "
|
|
" endnl=$(docker exec $c sh -c \"tail -c 1 $p | od -An -c | tr -d ' '\" 2>/dev/null); "
|
|
" peers=$(docker exec $c grep -c '^\\[Peer\\]' $p 2>/dev/null || echo 0); "
|
|
" echo \"$c/$f peers=$peers glue=$glue end=$endnl\"; "
|
|
" done; done"
|
|
)
|
|
|
|
d = json.load(open("/app/data/data.json"))
|
|
for s in d["servers"]:
|
|
try:
|
|
with SSHManager(s["host"], s.get("ssh_port", 22), s["username"],
|
|
password=s.get("password") or None,
|
|
private_key=s.get("private_key") or None,
|
|
connect_timeout=8) as ssh:
|
|
out, err, _ = ssh.run_command(ПРОБА, timeout=40)
|
|
for строка in (out or err).splitlines():
|
|
строка = строка.strip()
|
|
if not строка:
|
|
continue
|
|
плохо = ("glue=0" not in строка) or ("end=\\n" not in строка)
|
|
print("%s %-26s %s" % (" !!" if плохо else " ", s["name"][:26], строка))
|
|
except Exception as e:
|
|
print(" %-26s СБОЙ: %s" % (s["name"][:26], str(e)[:50]))
|