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

95 lines
3.2 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=$(cat /proc/loadavg | awk '{print $1 " " $2 " " $3}')
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}')
AUTHLOG=""
if [[ -f /var/log/auth.log ]]; then
AUTHLOG="/var/log/auth.log"
elif [[ -f /var/log/secure ]]; then
AUTHLOG="/var/log/secure"
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
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 "\n\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 "${BLUE}--- Неудачные попытки входа за 24ч (IP: попытки) ---${RESET}"
if [[ -n "$FAILED_IPS" ]]; then
echo -e "${RED}${FAILED_IPS}${RESET}"
else
echo "Нет неудачных попыток за 24 часа."
fi
echo -e "${BLUE}--- Успешные входы за 24ч (IP: раз) ---${RESET}"
if [[ -n "$SUCCESS_IPS" ]]; then
echo -e "${GREEN}${SUCCESS_IPS}${RESET}"
else
echo "Нет успешных входов за 24 часа."
fi
echo -e "${GREEN}Вы успешно вошли как ${USER} с IP: $(echo $SSH_CONNECTION | awk '{print $1}')${RESET}"
echo -e "${BLUE}=============================================${RESET}"
EOF
chmod +x "$TARGET_PATH"
echo "===> Скрипт MOTD установлен сюда: $TARGET_PATH"
echo "===> Пробуем пример вывода:"
bash "$TARGET_PATH"