Обновить server/motd-info.sh

This commit is contained in:
2026-04-15 10:16:37 +00:00
parent e6e28986d1
commit ed032a3a50

View File

@@ -4,7 +4,8 @@ set -e
MOTD_PATH="/etc/update-motd.d/00-sysinfo" MOTD_PATH="/etc/update-motd.d/00-sysinfo"
SCRIPT_CONTENT='#!/bin/bash cat > "$MOTD_PATH" <<"EOF"
#!/bin/bash
RED="\033[0;31m" RED="\033[0;31m"
GREEN="\033[0;32m" GREEN="\033[0;32m"
@@ -13,41 +14,43 @@ BLUE="\033[1;34m"
CYAN="\033[0;36m" CYAN="\033[0;36m"
RESET="\033[0m" RESET="\033[0m"
MEM_STAT=$(free -m | awk '\''/^Mem:/{printf "%.1f/%.1f МБ", $3, $2}'\'') MEM_STAT=$(free -m | awk '/^Mem:/{printf "%.1f/%.1f МБ", $3, $2}')
LOAD_AVG=$(cat /proc/loadavg | awk '\''{print $1 " " $2 " " $3}'\'') LOAD_AVG=$(cat /proc/loadavg | awk '{print $1 " " $2 " " $3}')
if command -v sensors &>/dev/null && sensors | grep -iP "Core|temp1" >/dev/null; then 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}'\'') CPU_TEMP=$(sensors | grep -iP "Core|temp1" | head -n1 | awk '{print $NF}')
elif [[ -r /sys/class/thermal/thermal_zone0/temp ]]; then elif [[ -r /sys/class/thermal/thermal_zone0/temp ]]; then
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp) TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
CPU_TEMP=$(awk "BEGIN{printf \"%.1f°C\", $TEMP_RAW/1000}") CPU_TEMP=$(awk "BEGIN{printf \"%.1f°C\", $TEMP_RAW/1000}")
else else
CPU_TEMP="N/A" CPU_TEMP="N/A"
fi fi
DISK_STAT=$(df -h / | awk '\''NR==2{printf "%s/%s (свободно/всего)", $4, $2}'\'') DISK_STAT=$(df -h / | awk 'NR==2{printf "%s/%s (свободно/всего)", $4, $2}')
AUTHLOG="" AUTHLOG=""
if [[ -f /var/log/auth.log ]]; then if [[ -f /var/log/auth.log ]]; then
AUTHLOG="/var/log/auth.log" AUTHLOG="/var/log/auth.log"
elif [[ -f /var/log/secure ]]; then elif [[ -f /var/log/secure ]]; then
AUTHLOG="/var/log/secure" AUTHLOG="/var/log/secure"
fi fi
FAILED_IPS="" FAILED_IPS=""
FAILED_LIMIT=10
if [[ -n $AUTHLOG ]]; then if [[ -n $AUTHLOG ]]; then
FAILED_IPS=$(sudo grep "Failed password" "$AUTHLOG" \ FAILED_IPS=$(sudo grep "Failed password" "$AUTHLOG" \
| awk "/from/ {print \$(NF-3)}" \ | awk '/from/ {print $(NF-3)}' \
| sort | uniq -c | sort -nr \ | sort | uniq -c | sort -nr \
| head -n \$FAILED_LIMIT \ | head -n 10 \
| awk "{printf \"%s: %s\\\\n\", \$2, \$1}") | awk '{printf "%s: %s\n", $2, $1}')
fi fi
SUCCESS_IPS="" SUCCESS_IPS=""
SUCCESS_LIMIT=10
if [[ -n $AUTHLOG ]]; then if [[ -n $AUTHLOG ]]; then
SUCCESS_IPS=$(sudo grep "Accepted password" "$AUTHLOG" \ SUCCESS_IPS=$(sudo grep "Accepted password" "$AUTHLOG" \
| awk "/from/ {print \$(NF-3)}" \ | awk '/from/ {print $(NF-3)}' \
| sort | uniq -c | sort -nr \ | sort | uniq -c | sort -nr \
| head -n \$SUCCESS_LIMIT \ | head -n 10 \
| awk "{printf \"%s: %s\\\\n\", \$2, \$1}") | awk '{printf "%s: %s\n", $2, $1}')
fi fi
echo -e "${BLUE}============ Состояние сервера ============${RESET}" echo -e "${BLUE}============ Состояние сервера ============${RESET}"
echo -e "${YELLOW}ОЗУ: ${GREEN}${MEM_STAT}${RESET}" echo -e "${YELLOW}ОЗУ: ${GREEN}${MEM_STAT}${RESET}"
echo -e "${YELLOW}Нагрузка: ${GREEN}${LOAD_AVG}${RESET} (1/5/15 мин)" echo -e "${YELLOW}Нагрузка: ${GREEN}${LOAD_AVG}${RESET} (1/5/15 мин)"
@@ -66,27 +69,12 @@ else
echo "Нет успешных входов." echo "Нет успешных входов."
fi fi
echo -e "${BLUE}=============================================${RESET}" echo -e "${BLUE}=============================================${RESET}"
' EOF
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" chmod +x "$MOTD_PATH"
echo "===> Скрипт MOTD установлен: $MOTD_PATH" echo "===> Скрипт MOTD установлен: $MOTD_PATH"
echo
echo "===> Тестовый вывод:" echo "===> Тестовый вывод:"
bash "$MOTD_PATH" bash "$MOTD_PATH"
echo
echo "Если сообщение красиво выводится — всё готово!" echo "Если сообщение красиво выводится — всё готово!"
echo
echo "При входе по SSH каждый раз вы будете видеть свежий статус." echo "При входе по SSH каждый раз вы будете видеть свежий статус."