From e6e28986d1a12af7023dc7f015fbec8ee5ed66b1 Mon Sep 17 00:00:00 2001 From: CREATIVE_tg1 Date: Wed, 15 Apr 2026 10:12:13 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20server/motd-info.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/motd-info.sh | 92 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 server/motd-info.sh diff --git a/server/motd-info.sh b/server/motd-info.sh new file mode 100644 index 0000000..3bdd3b2 --- /dev/null +++ b/server/motd-info.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +set -e + +MOTD_PATH="/etc/update-motd.d/00-sysinfo" + +SCRIPT_CONTENT='#!/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 +FAILED_IPS="" +FAILED_LIMIT=10 +if [[ -n $AUTHLOG ]]; then + FAILED_IPS=$(sudo grep "Failed password" "$AUTHLOG" \ + | awk "/from/ {print \$(NF-3)}" \ + | sort | uniq -c | sort -nr \ + | head -n \$FAILED_LIMIT \ + | awk "{printf \"%s: %s\\\\n\", \$2, \$1}") +fi +SUCCESS_IPS="" +SUCCESS_LIMIT=10 +if [[ -n $AUTHLOG ]]; then + SUCCESS_IPS=$(sudo grep "Accepted password" "$AUTHLOG" \ + | awk "/from/ {print \$(NF-3)}" \ + | sort | uniq -c | sort -nr \ + | head -n \$SUCCESS_LIMIT \ + | awk "{printf \"%s: %s\\\\n\", \$2, \$1}") +fi +echo -e "${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}--- Неудачные попытки входа (IP: попытки) ---${RESET}" +if [[ -n "$FAILED_IPS" ]]; then + echo -e "${RED}${FAILED_IPS}${RESET}" +else + echo "Нет неудачных попыток." +fi +echo -e "${BLUE}--- Успешные входы (IP: раз) ---${RESET}" +if [[ -n "$SUCCESS_IPS" ]]; then + echo -e "${GREEN}${SUCCESS_IPS}${RESET}" +else + echo "Нет успешных входов." +fi +echo -e "${BLUE}=============================================${RESET}" +' + +echo +echo "===> Установка motd-скрипта..." + +# Требует root, если не root - перезапусти сам себя через sudo +if [[ "$EUID" -ne 0 ]]; then + echo "Требуются root-права. Запускаю через sudo..." + exec sudo bash "$0" "$@" +fi + +# Создаём файл +echo "$SCRIPT_CONTENT" > "$MOTD_PATH" +chmod +x "$MOTD_PATH" + +echo "===> Скрипт MOTD установлен: $MOTD_PATH" + +echo +echo "===> Тестовый вывод:" +bash "$MOTD_PATH" +echo +echo "Если сообщение красиво выводится — всё готово!" +echo +echo "При входе по SSH каждый раз вы будете видеть свежий статус." \ No newline at end of file