KaliSupport / test_ssh.py
Tayrrr's picture
Upload folder using huggingface_hub
7ea1cf8 verified
Raw History Blame Contribute Delete
4.45 kB
"""SSH baglanti testi.
Calistirma:
python test_ssh.py
Yaptiklari:
1. .env'i okur, SSHConfig olusturur (eksik alan varsa erken hata).
2. Kali'ye baglanir, ping atar.
3. Kimlik / sistem dogrulayan bir dizi guvenli komut calistirir.
4. Pentest araclarinin (nmap, gobuster, sqlmap, vs.) varligini kontrol eder.
5. Adim adim yesil/kirmizi rapor basar.
Hata cikarsa son satira bakman yeterli; basarisiz olan adim aciklanir.
"""
from __future__ import annotations
import sys
from typing import Iterable
from logger import SessionLogger
from ssh_client import CommandResult, KaliSSH, SSHConnectionError
# (etiket, komut, basari icin stdout icinde aranacak alt-string ya da None)
SANITY_COMMANDS: tuple[tuple[str, str, str | None], ...] = (
("kullanici", "whoami", None),
("hostname", "hostname", None),
("kernel", "uname -a", "Linux"),
("dagitim", "cat /etc/os-release | head -n 5", "kali"),
("ip adresleri", "hostname -I", None),
("calisma dizini", "pwd", None),
)
PENTEST_TOOLS: tuple[str, ...] = (
"nmap",
"gobuster",
"dirb",
"sqlmap",
"msfconsole",
"hydra",
"nikto",
)
def _color(code: str, text: str) -> str:
return f"\033[{code}m{text}\033[0m"
def _ok(msg: str) -> None:
print(_color("32", "[OK] ") + msg)
def _fail(msg: str) -> None:
print(_color("31", "[FAIL] ") + msg)
def _info(msg: str) -> None:
print(_color("36", "[..] ") + msg)
def _short(text: str, n: int = 200) -> str:
text = text.strip().replace("\n", " | ")
return text if len(text) <= n else text[:n] + "..."
def run_sanity(kali: KaliSSH, items: Iterable[tuple[str, str, str | None]]) -> bool:
all_ok = True
for label, cmd, expect in items:
try:
res: CommandResult = kali.run(cmd, timeout=15)
except SSHConnectionError as exc:
_fail(f"{label}: {exc}")
all_ok = False
continue
if not res.ok:
_fail(f"{label}: exit={res.exit_code} | {_short(res.stderr or res.stdout)}")
all_ok = False
continue
if expect and expect.lower() not in res.stdout.lower():
_fail(f"{label}: '{expect}' beklenirdi ama stdout: {_short(res.stdout)}")
all_ok = False
continue
_ok(f"{label}: {_short(res.stdout)}")
return all_ok
def check_tools(kali: KaliSSH, tools: Iterable[str]) -> None:
print()
_info("Pentest araclari kontrolu (eksik olan varsa: sudo apt install ...)")
for tool in tools:
try:
res = kali.run(f"command -v {tool}", timeout=10)
except SSHConnectionError as exc:
_fail(f"{tool}: {exc}")
continue
if res.ok and res.stdout.strip():
_ok(f"{tool}: {res.stdout.strip()}")
else:
_fail(f"{tool}: bulunamadi")
def main() -> int:
print(_color("1", "=== Kali SSH baglanti testi ==="))
# Test scriptinin kendi [OK]/[FAIL] ciktisi var; logger'i sadece dosyaya yaz.
log = SessionLogger.create(echo_to_console=False)
log.info("ssh_test_start")
try:
kali = KaliSSH.from_config(logger=log)
except Exception as exc: # noqa: BLE001
_fail(f"Konfigurasyon hatasi: {exc}")
log.close()
return 2
_info(
f"Hedef: {kali.cfg.username}@{kali.cfg.host}:{kali.cfg.port} "
f"(anahtar: {kali.cfg.key_path})"
)
try:
kali.connect()
except SSHConnectionError as exc:
_fail(str(exc))
log.close()
return 1
_ok("TCP + kimlik dogrulama basarili")
if not kali.ping():
_fail("Ping (echo pong) basarisiz; kanal saglikli degil")
kali.close()
log.close()
return 1
_ok("Kanal saglikli (echo pong)")
print()
_info("Sanity komutlari calistiriliyor...")
sanity_ok = run_sanity(kali, SANITY_COMMANDS)
check_tools(kali, PENTEST_TOOLS)
kali.close()
log.info("ssh_test_done", sanity_ok=sanity_ok)
log.close()
print()
if sanity_ok:
print(_color("32;1", "TUM SANITY KONTROLLERI GECTI."))
return 0
print(_color("31;1", "BAZI KONTROLLER BASARISIZ. Yukaridaki [FAIL] satirlarini incele."))
return 1
if __name__ == "__main__":
sys.exit(main())