Обновить server/motd-info.sh
This commit is contained in:
@@ -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 каждый раз вы будете видеть свежий статус."
|
||||
echo "===> Скрипт MOTD установлен сюда: $TARGET_PATH"
|
||||
echo "===> Пробуем пример вывода:"
|
||||
bash "$TARGET_PATH"
|
||||
Reference in New Issue
Block a user