diff --git a/server/motd-info.sh b/server/motd-info.sh index fabac80..0a6cbf0 100644 --- a/server/motd-info.sh +++ b/server/motd-info.sh @@ -1,10 +1,10 @@ #!/bin/bash -set -e +# Скрипт установки кастомного sysinfo MOTD -MOTD_PATH="/etc/update-motd.d/zzzzz-motd-sysinfo" +TARGET_PATH="/etc/update-motd.d/zzzzz-motd-sysinfo" -cat > "$MOTD_PATH" <<"EOF" +cat > "$TARGET_PATH" <<"EOF" #!/bin/bash RED="\033[0;31m" @@ -33,22 +33,35 @@ elif [[ -f /var/log/secure ]]; then AUTHLOG="/var/log/secure" fi -FAILED_IPS="" -if [[ -n $AUTHLOG ]]; then - FAILED_IPS=$(sudo grep "Failed password" "$AUTHLOG" \ - | awk '/from/ {print $(NF-3)}' \ - | sort | uniq -c | sort -nr \ - | head -n 10 \ - | awk '{printf "%s: %s\n", $2, $1}') -fi +DATE_24H_AGO=$(date --date="24 hours ago" "+%b %-d") +CURRENT_DATE=$(date "+%b %-d") +HOUR_24H_AGO=$(date --date="24 hours ago" "+%H") +CURRENT_HOUR=$(date "+%H") +extract_lines_24h() { + awk -v d1="$DATE_24H_AGO" -v d2="$CURRENT_DATE" -v h1="$HOUR_24H_AGO" -v h2="$CURRENT_HOUR" ' + { + line_date = $1 " " $2 + line_hour = substr($3,1,2) + if (line_date == d1 && line_date != d2) { + if (line_hour >= h1) print $0 + } + else if (line_date == d2) { + if (line_hour <= h2) print $0 + } + else if (line_date > d1 && line_date < d2) { + print $0 + } + } + ' "$AUTHLOG" +} + +FAILED_IPS="" SUCCESS_IPS="" if [[ -n $AUTHLOG ]]; then - SUCCESS_IPS=$(sudo grep "Accepted password" "$AUTHLOG" \ - | awk '/from/ {print $(NF-3)}' \ - | sort | uniq -c | sort -nr \ - | head -n 10 \ - | awk '{printf "%s: %s\n", $2, $1}') + RECENT_LOG=$(extract_lines_24h) + FAILED_IPS=$(echo "$RECENT_LOG" | grep "Failed password" | awk '/from/ {print $(NF-3)}' | sort | uniq -c | sort -nr | head -n 10 | awk '{printf "%s: %s\n", $2, $1}') + SUCCESS_IPS=$(echo "$RECENT_LOG" | grep "Accepted password" | awk '/from/ {print $(NF-3)}' | sort | uniq -c | sort -nr | head -n 10 | awk '{printf "%s: %s\n", $2, $1}') fi echo -e "${BLUE}============ Состояние сервера ============${RESET}" @@ -56,25 +69,27 @@ echo -e "${YELLOW}ОЗУ: ${GREEN}${MEM_STAT}${RESET}" echo -e "${YELLOW}Нагрузка: ${GREEN}${LOAD_AVG}${RESET} (1/5/15 мин)" echo -e "${YELLOW}Диск: ${GREEN}${DISK_STAT}${RESET}" echo -e "${YELLOW}CPU: ${GREEN}${CPU_TEMP}${RESET}" -echo -e "${BLUE}--- Неудачные попытки входа (IP: попытки) ---${RESET}" + +echo -e "${BLUE}--- Неудачные попытки входа за 24ч (IP: попытки) ---${RESET}" if [[ -n "$FAILED_IPS" ]]; then echo -e "${RED}${FAILED_IPS}${RESET}" else - echo "Нет неудачных попыток." + echo "Нет неудачных попыток за 24 часа." fi -echo -e "${BLUE}--- Успешные входы (IP: раз) ---${RESET}" + +echo -e "${BLUE}--- Успешные входы за 24ч (IP: раз) ---${RESET}" if [[ -n "$SUCCESS_IPS" ]]; then echo -e "${GREEN}${SUCCESS_IPS}${RESET}" else - echo "Нет успешных входов." + echo "Нет успешных входов за 24 часа." fi + +echo -e "${CYAN}Ваш sysinfo отчёт был сгенерирован с заботой о сервере :)${RESET}" echo -e "${BLUE}=============================================${RESET}" EOF -chmod +x "$MOTD_PATH" +chmod +x "$TARGET_PATH" -echo "===> Скрипт MOTD установлен: $MOTD_PATH" -echo "===> Тестовый вывод:" -bash "$MOTD_PATH" -echo "Если сообщение красиво выводится — всё готово!" -echo "При входе по SSH каждый раз вы будете видеть свежий статус." \ No newline at end of file +echo "===> Скрипт MOTD установлен сюда: $TARGET_PATH" +echo "===> Пробуем пример вывода:" +bash "$TARGET_PATH" \ No newline at end of file