logauth
Wdrożenie skryptu logauth
Skrypt logauth służy do podglądu logów logowania SSH z journald (ssh.service). Wyświetla ostatnie wpisy w czytelnym formacie z kolorami i umożliwiając podanie liczby linii jako parametr.
Utworzenie pliku skryptu
Tworzymy plik skryptu w lokalizacji /srv/config/scripts/:
micro /srv/config/scripts/logauth
Wklejamy treść skryptu:
logauth
#!/usr/bin/env bash
set -euo pipefail
N="${1:-50}"
if ! [[ "$N" =~ ^[0-9]+$ ]] || [[ "$N" -le 0 ]]; then
echo "Usage: logauth [N]"
echo " N - number of lines (positive integer), default: 50"
exit 2
fi
# Fetch more than needed, because we filter entries in awk.
# This makes output count stable (exactly N lines, if available).
FETCH=$((N * 50))
sudo journalctl -u ssh -n "$FETCH" --no-pager |
awk -v limit="$N" '
BEGIN {
mon["Jan"]="01"; mon["Feb"]="02"; mon["Mar"]="03"; mon["Apr"]="04";
mon["May"]="05"; mon["Jun"]="06"; mon["Jul"]="07"; mon["Aug"]="08";
mon["Sep"]="09"; mon["Oct"]="10"; mon["Nov"]="11"; mon["Dec"]="12";
count=0
}
{
# Skip anything not matching the three event types
if ($0 ~ /Accepted/)
status = "\033[1;32mACCEPTED\033[0m"
else if ($0 ~ /Failed/)
status = "\033[1;31mFAILED\033[0m"
else if ($0 ~ /Invalid user/)
status = "\033[1;33mINVALID\033[0m"
else
next
if ($0 ~ /publickey/) auth="publickey"
else if ($0 ~ /password/) auth="password"
else auth="unknown"
date = sprintf("\033[38;5;243m2025-%s-%s %s\033[0m", mon[$1], $2, $3)
match($0, /for (invalid user )?([^ ]+)/, u)
match($0, /from ([0-9.]+)/, i)
match($0, /port ([0-9]+)/, p)
print date, status, "(" auth ")", "user", "\033[95m" u[2] "\033[0m", "from", "\033[96m" i[1] "\033[0m", "port", p[1], "ssh2"
count++
if (count >= limit) exit
}'
Nadanie uprawnień
Nadajemy prawa do uruchamiania:
chmod +x /srv/config/scripts/logauth
Dodanie do PATH
Tworzymy link w /usr/local/bin, aby skrypt był dostępny jako polecenie systemowe:
sudo ln -sf /srv/config/scripts/logauth /usr/local/bin/logauth
Sprawdzamy dostępność polecenia:
command -v logauth
Użycie skryptu
Wyświetlamy domyślnie ostatnie 50 wpisów:
logauth
Wyświetlamy ostatnie 200 wpisów:
logauth 200
Uwagi utrzymaniowe
- Skrypt przeznaczony jest do ręcznego podglądu logów.
- Skrypt używa
sudo journalctl— jeślisudowymaga hasła, zostanie ono wymagane przy uruchomieniu. - W przypadku braku wpisów dla
sshnależy zweryfikować nazwę jednostki (sshvssshd) poleceniemsystemctl status ssh.