From da5d2638d7e5e78b5d834179666736a5065f917e Mon Sep 17 00:00:00 2001 From: ssh-monitor Date: Tue, 14 Apr 2026 09:55:03 +1000 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=20=D1=81?= =?UTF-8?q?=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=BE=D0=B9,=20=D0=B5=D1=81?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=BD=D0=B5=D1=82=20=D0=BD=D0=B8=20=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=20NOTIFY=5FCHAIN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- README.md | 4 ++-- ssh-monitor | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eac930d..c9815a6 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Bash-скрипт мониторинга **SSH**, **SUDO** и событий **` Поддерживаемые параметры: - `TELEGRAM_BOT_TOKEN`, `TELEGRAM_CHAT_ID` -- `NOTIFY_ORDER` — явная очередь каналов оповещений (`telegram`, `zabbix`, `email` и сокращения); пусто = в цепочку попадают только настроенные каналы (порядок по умолчанию см. в `ssh-monitor.conf.example`) +- `NOTIFY_ORDER` — явная очередь каналов оповещений (`telegram`, `zabbix`, `email` и сокращения); пусто = в цепочку попадают только настроенные каналы (порядок по умолчанию см. в `ssh-monitor.conf.example`). Если итоговая цепочка пуста — скрипт не стартует (см. описание `NOTIFY_ORDER` ниже). - `ZABBIX_SERVER`, `ZABBIX_HOST_NAME`, `ZABBIX_ALERT_KEY`, `ZABBIX_SEQ_KEY` — отправка в Zabbix через `zabbix_sender`; подробнее — раздел **«Zabbix (`zabbix_sender`)»** ниже - `BACKUP_WEBHOOK_URL` — резервная доставка JSON `{"text":"..."}` (например Slack Incoming Webhook), если Telegram недоступен или вернул ошибку - `LOG_FILE`, `LAST_HEARTBEAT_FILE`, `LAST_REPORT_FILE`, `LAST_SSH_CHECK_FILE`, `LAST_SUDO_CHECK_FILE`, `LAST_SECURITY_EVENTS_FILE`, `LAST_LOGIND_CHECK_FILE`, `BAN_LIST_FILE` @@ -36,7 +36,7 @@ Bash-скрипт мониторинга **SSH**, **SUDO** и событий **` - `TELEGRAM_BOT_TOKEN` — токен Telegram-бота для отправки уведомлений. - `TELEGRAM_CHAT_ID` — ID чата/пользователя, куда отправляются уведомления. -- `NOTIFY_ORDER` — CSV имён каналов (`telegram`, `zabbix`, `email` или `tg`, `zbx`, `mail`). Пустая строка: автоматически собирается цепочка только из реально настроенных каналов (по умолчанию порядок telegram → zabbix → email). +- `NOTIFY_ORDER` — CSV имён каналов (`telegram`, `zabbix`, `email` или `tg`, `zbx`, `mail`). Пустая строка: автоматически собирается цепочка только из реально настроенных каналов (по умолчанию порядок telegram → zabbix → email). Если после сборки цепочки **нет ни одного** канала (ни Telegram, ни Zabbix, ни почты по критериям ниже), скрипт **сразу завершается** с ошибкой: **«Не настроен ни один канал отправки оповещений»** (в том числе режим `--check-config` и `--dry-run`). - `ZABBIX_SERVER` — имя или IP сервера Zabbix для `zabbix_sender -z` (пусто = канал Zabbix отключён). - `ZABBIX_HOST_NAME` — имя **хоста в Zabbix**, как в конфигурации агента/шаблона (`-s` у `zabbix_sender`); должно совпадать с тем, для какого хоста созданы trapper-элементы. - `ZABBIX_ALERT_KEY` — ключ **первого** trapper-элемента: в него уходит **текст** оповещения (одна строка, переводы строк заменены пробелами). diff --git a/ssh-monitor b/ssh-monitor index 9d8daf8..59d7e9a 100644 --- a/ssh-monitor +++ b/ssh-monitor @@ -323,6 +323,10 @@ validate_config() { validate_numeric_or_default "BRUTE_NOTIFY_COOLDOWN_SEC" "3600" validate_numeric_or_default "MAIL_SMTP_PORT" "587" refresh_notify_chain + if [ "${#NOTIFY_CHAIN[@]}" -eq 0 ]; then + printf '%s\n' 'Не настроен ни один канал отправки оповещений' >&2 + exit 1 + fi } # ============================================