Files
for-servers/server/motd-info.sh

103 lines
3.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт установки кастомного sysinfo MOTD со статистикой логинов
TARGET_PATH="/etc/update-motd.d/zzzzz-motd-sysinfo"
cat > "$TARGET_PATH" <<"EOF"
#!/bin/bash
RED="\033[0;31m"
GREEN="\033[0;32m"
YELLOW="\033[1;33m"
BLUE="\033[1;34m"
CYAN="\033[0;36m"
RESET="\033[0m"
MEM_STAT=$(free -m | awk '/^Mem:/{printf "%.1f/%.1f МБ", $3, $2}')
LOAD_AVG=$(awk '{print $1 " " $2 " " $3}' /proc/loadavg)
if command -v sensors &>/dev/null && sensors | grep -iP "Core|temp1" >/dev/null; then
CPU_TEMP=$(sensors | grep -iP "Core|temp1" | head -n1 | awk '{print $NF}')
elif [[ -r /sys/class/thermal/thermal_zone0/temp ]]; then
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
CPU_TEMP=$(awk "BEGIN{printf \"%.1f°C\", $TEMP_RAW/1000}")
else
CPU_TEMP="N/A"
fi
DISK_STAT=$(df -h / | awk 'NR==2{printf "%s/%s (свободно/всего)", $4, $2}')
# Английская локаль для дат
DATE_24H_AGO=$(LC_TIME=C date --date="24 hours ago" "+%b %-d")
CURRENT_DATE=$(LC_TIME=C date "+%b %-d")
HOUR_24H_AGO=$(date --date="24 hours ago" "+%H")
CURRENT_HOUR=$(date "+%H")
get_recent_logs() {
local AUTHLOG=""
if [[ -f /var/log/auth.log ]]; then
AUTHLOG="/var/log/auth.log"
elif [[ -f /var/log/secure ]]; then
AUTHLOG="/var/log/secure"
fi
if [[ -n "$AUTHLOG" ]]; then
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"
elif command -v journalctl &>/dev/null; then
journalctl -u ssh -u sshd --since "24 hours ago" --no-pager 2>/dev/null
fi
}
RECENT_LOG=$(get_recent_logs)
FAILED_IPS=$(echo "$RECENT_LOG" | grep "Failed " | awk '{for(i=1;i<NF;i++) if($i=="from") print $(i+1)}' | grep -E '^[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head -n 10 | awk '{printf "%s: %s\n", $2, $1}')
SUCCESS_IPS=$(echo "$RECENT_LOG" | grep "Accepted " | awk '{for(i=1;i<NF;i++) if($i=="from") print $(i+1)}' | grep -E '^[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head -n 10 | awk '{printf "%s: %s\n", $2, $1}')
echo -e "\n\n${BLUE}============ Состояние сервера ============${RESET}"
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 "\n${BLUE}--- Неудачные попытки входа за 24ч (IP: попытки) ---${RESET}"
if [[ -n "$FAILED_IPS" ]]; then
echo -e "${RED}${FAILED_IPS}${RESET}"
else
echo "Нет неудачных попыток за 24 часа."
fi
echo -e "\n${BLUE}--- Успешные входы за 24ч (IP: раз) ---${RESET}"
if [[ -n "$SUCCESS_IPS" ]]; then
echo -e "${GREEN}${SUCCESS_IPS}${RESET}"
else
echo "Нет успешных входов за 24 часа."
fi
if [[ -n "$SSH_CONNECTION" ]]; then
CURRENT_IP=$(echo $SSH_CONNECTION | awk '{print $1}')
echo -e "\n${GREEN}Вы успешно вошли как ${USER} с IP: ${CURRENT_IP}${RESET}"
else
echo -e "\n${GREEN}Вы успешно вошли как ${USER} (Локальный вход)${RESET}"
fi
echo -e "${BLUE}=============================================${RESET}"
EOF
chmod +x "$TARGET_PATH"
echo "===> Скрипт MOTD установлен сюда: $TARGET_PATH"
echo "===> Пробуем пример вывода:"
bash "$TARGET_PATH"