Добавить server/motd-info.sh
This commit is contained in:
92
server/motd-info.sh
Normal file
92
server/motd-info.sh
Normal file
@@ -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 каждый раз вы будете видеть свежий статус."
|
||||||
Reference in New Issue
Block a user