61 lines
1.3 KiB
Bash
61 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
CACHE_FILE="/tmp/f2b-container"
|
|
|
|
resolve_container() {
|
|
# 1. Versuch: Compose Label
|
|
local c
|
|
c=$(docker ps \
|
|
--filter "label=com.docker.compose.service=fail2ban" \
|
|
--format '{{.Names}}' \
|
|
| head -n 1)
|
|
|
|
if [[ -n "$c" ]]; then
|
|
echo "$c"
|
|
return
|
|
fi
|
|
|
|
# 2. Fallback: Kandidaten
|
|
local CANDIDATES=("fail2ban" "fail-2-ban" "f2b")
|
|
|
|
for name in "${CANDIDATES[@]}"; do
|
|
if docker ps --format '{{.Names}}' | grep -qx "$name"; then
|
|
echo "$name"
|
|
return
|
|
fi
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
# --- Cache verwenden ---
|
|
if [[ -f "$CACHE_FILE" ]]; then
|
|
CONTAINER=$(<"$CACHE_FILE")
|
|
|
|
# prüfen ob er noch läuft
|
|
if ! docker ps --format '{{.Names}}' | grep -qx "$CONTAINER"; then
|
|
CONTAINER=""
|
|
fi
|
|
else
|
|
CONTAINER=""
|
|
fi
|
|
|
|
# --- neu auflösen wenn nötig ---
|
|
if [[ -z "${CONTAINER:-}" ]]; then
|
|
CONTAINER=$(resolve_container || true)
|
|
|
|
if [[ -z "$CONTAINER" ]]; then
|
|
echo "❌ Kein fail2ban-Container gefunden"
|
|
exit 1
|
|
fi
|
|
|
|
echo "$CONTAINER" > "$CACHE_FILE"
|
|
fi
|
|
|
|
# --- Aufruf ---
|
|
if [[ $# -eq 0 ]]; then
|
|
docker exec -i "$CONTAINER" fail2ban-client -h
|
|
else
|
|
docker exec -i "$CONTAINER" fail2ban-client "$@"
|
|
fi |