#!/bin/sh # .. vim: foldmarker=[[[,]]]:foldmethod=marker # {{ ansible_managed }} # Colors definition [[[ BLACK='\033[49;30m' BLACKB='\033[49;90m' RED='\033[0;31m' REDB='\033[1;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[94;49m' MAGENTA='\033[0;35m' CYAN='\033[36;49m' WHITE='\033[0;37m' BOLD='\033[1m' RESET='\033[0m' # ]]] # Function definition [[[ ## count_pattern() ### Return the number of occurrence of a pattern in a file with a color ### (=expected_value : green ; otherwise : red). count_pattern() { ## Get the args PATTERN="${1}" FILE="${2}" EXPECTED_VALUE="${3}" ## Count the pattern in the file NUM=$(grep -cE "${PATTERN}" "${FILE}") ## If $EXPECTED_VALUE exist AND $NUM equal $EXPECTED_VALUE if [ "${EXPECTED_VALUE}" ] && [ "${NUM}" = "${EXPECTED_VALUE}" ]; then MSG="${GREEN}${NUM}" else MSG="${RED}${NUM}" fi printf '%b' "${MSG}" } # ]]] # Vars definition [[[ ## Get the most recent "auth.log" file. ## Simpliest way to get it ? AUTH_LOG_FILE=$(find /var/log -type f -iname 'auth.log' -printf "%T@ %p\\n" | sort -n | cut -d' ' -f 2- | tail -n 1) ## Number of failed SSH authentication SSH_FAIL_LOGIN=$(count_pattern 'sshd.*Failed' "${AUTH_LOG_FILE}" '0') ## Number of failed sudo authentication SUDO_FAIL=$(count_pattern 'sudo.*authentication failure' "${AUTH_LOG_FILE}" '0') SUDO_3_FAIL=$(count_pattern 'sudo.*3 incorrect password' "${AUTH_LOG_FILE}" '0') # ]]] #+++++++++++++++++++: Auth Info :+++++++++++++++++++ printf '%b' "${RESET}" printf "${BLACKB}%33s${RESET}" | tr ' ' - printf '%b' " ${CYAN}Auth Info${RESET} " printf "${BLACKB}%34s${RESET}" | tr ' ' - printf '%b' " ${BLACKB}+ ${WHITE}SSH fail\\t\\t${BLACKB}= ${SSH_FAIL_LOGIN} fail(s) this week ${BLACKB}+ ${WHITE}Sudo fail\\t\\t${BLACKB}= ${GREEN}${SUDO_FAIL} fail(s) this week ${BLACKB}+ ${WHITE}Sudo 3 fails\\t\\t${BLACKB}= ${GREEN}${SUDO_3_FAIL} fail(s) this week " printf '%b' "${RESET}"