Skip to content

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śli sudo wymaga hasła, zostanie ono wymagane przy uruchomieniu.
  • W przypadku braku wpisów dla ssh należy zweryfikować nazwę jednostki (ssh vs sshd) poleceniem systemctl status ssh.