feat: watchdog Telegram shows server name (2.1.9-SAC)
Add shared server label helpers in ssh-monitor-perms.sh; roadmap marks phase 1 done and phase 2.2.0 as next release. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# ssh-monitor
|
||||
|
||||
**Версия:** `2.1.8-SAC`
|
||||
**Версия:** `2.1.9-SAC`
|
||||
|
||||
Bash-мониторинг **SSH**, **sudo**, **systemd-logind**: Telegram/email, бан IP (ipset), ежедневный отчёт, heartbeat.
|
||||
|
||||
|
||||
@@ -24,11 +24,15 @@
|
||||
|--------|------|------|
|
||||
| **2.1.7-SAC** | Фаза 1 + выбранное из Фазы 4 | Права, `REPO_URL` обязателен, webhook, docs | ✅ реализовано |
|
||||
| **2.1.8-SAC** | Дополнение к 1.1 | SAC-first update: hardening прав на каждом прогоне updater | ✅ реализовано |
|
||||
| **2.2.0-SAC** | Фаза 2 | Manifest, pinned ref, без слепого `reset --hard` |
|
||||
| **2.1.9-SAC** | Дополнение к 1.x | Watchdog: `🖥️ Сервер:` в Telegram (как у агента) | ✅ реализовано |
|
||||
| **2.2.0-SAC** | **Фаза 2** | Manifest, pinned ref, без слепого `reset --hard` | **следующий релиз** |
|
||||
| **2.3.0-SAC** | Фаза 3 | Парсер конфига без `source` (minor breaking) |
|
||||
|
||||
Bump: `ssh-monitor` (`SSH_MONITOR_VERSION`) + `version.txt` в каждом релизе.
|
||||
|
||||
**Текущий статус (2026-07-08):** фаза 1 закрыта (2.1.7–2.1.9). **Дальше — фаза 2 → релиз 2.2.0-SAC.**
|
||||
Backlog по ingest при массовом update (SAC + ops): [ingest-mass-update-backlog.ru.md](https://git.kalinamall.ru/PapaTramp/security-alert-center/src/branch/main/docs/ingest-mass-update-backlog.ru.md) (отдельный ToDo, не блокирует 2.2.0).
|
||||
|
||||
---
|
||||
|
||||
## Фаза 1 — 2.1.7-SAC
|
||||
@@ -232,14 +236,12 @@ Bump: `ssh-monitor` (`SSH_MONITOR_VERSION`) + `version.txt` в каждом ре
|
||||
|
||||
## Чек-лист «перед стартом работы завтра»
|
||||
|
||||
Утвердить галочками:
|
||||
|
||||
- [ ] **Релиз 2.1.7** — scope: 1.1, 1.2 (warn), 1.4, 1.5, 4.4, 4.3 + **1.3 вариант A/B/C**
|
||||
- [ ] **Релиз 2.2.0** — scope: 2.1–2.3, 2.5, 4.5, 4.7(M7); **2.4 отложить**
|
||||
- [x] **Релиз 2.1.7–2.1.9** — фаза 1 + SAC-first + watchdog server label
|
||||
- [ ] **Релиз 2.2.0** — scope: 2.1–2.3, 2.5, 4.5, 4.7(M7); **2.4 GPG отложить**
|
||||
- [ ] **Релиз 2.3.0** — scope: 3.1–3.3, удаление webhook (если A)
|
||||
- [ ] **Дефолт `GIT_REF`** в 2.2.0: тег из `version.txt` vs `main`
|
||||
- [ ] **Миграция хостов 2.1.7:** рассылка примера `Environment=REPO_URL=...` для systemd / SAC
|
||||
- [ ] **GPG:** отложить до явного запроса
|
||||
- [x] **Миграция хостов:** SAC-first update, `known_hosts`, `REPO_URL` через SAC
|
||||
- [ ] **Ingest mass-update backlog** — см. security-alert-center `docs/ingest-mass-update-backlog.ru.md`
|
||||
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ IFS=$'\n\t'
|
||||
# ============================================
|
||||
|
||||
CONFIG_FILE="/etc/ssh-monitor.conf"
|
||||
SSH_MONITOR_VERSION="2.1.8-SAC"
|
||||
SSH_MONITOR_VERSION="2.1.9-SAC"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
if [ -f "$SCRIPT_DIR/ssh-monitor-perms.sh" ]; then
|
||||
|
||||
@@ -132,3 +132,42 @@ ssh_monitor_check_config_file_perms() {
|
||||
esac
|
||||
return 0
|
||||
}
|
||||
|
||||
# Подпись сервера в Telegram/webhook (как в ssh-monitor: SERVER_DISPLAY_NAME или hostname + IPv4).
|
||||
ssh_monitor_server_display_name_with_ip() {
|
||||
local hn ip
|
||||
hn="${SERVER_DISPLAY_NAME:-}"
|
||||
if [ -z "$hn" ]; then
|
||||
hn="$(hostname 2>/dev/null | tr -d '\r\n')"
|
||||
[ -z "$hn" ] && hn="(unknown)"
|
||||
fi
|
||||
ip="${SERVER_IPV4:-}"
|
||||
if [ -z "$ip" ] && command -v ip >/dev/null 2>&1; then
|
||||
ip="$(ip -4 route get 1.1.1.1 2>/dev/null | awk '/\bsrc\b/ {for (i = 1; i < NF; i++) if ($i == "src") { print $(i + 1); exit }}')"
|
||||
[ -z "$ip" ] && ip="$(ip -4 route get 8.8.8.8 2>/dev/null | awk '/\bsrc\b/ {for (i = 1; i < NF; i++) if ($i == "src") { print $(i + 1); exit }}')"
|
||||
fi
|
||||
if [ -z "$ip" ] && command -v hostname >/dev/null 2>&1 && hostname -I >/dev/null 2>&1; then
|
||||
ip="$(hostname -I 2>/dev/null | tr ' ' '\n' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | grep -Ev '^(127\.|0\.0\.0\.0)$' | head -n1)"
|
||||
fi
|
||||
if [ -n "$ip" ]; then
|
||||
printf '%s (%s)' "$hn" "$ip"
|
||||
else
|
||||
printf '%s' "$hn"
|
||||
fi
|
||||
}
|
||||
|
||||
ssh_monitor_message_ensure_server_line() {
|
||||
local msg="$1"
|
||||
if [[ "$msg" == *'🖥️ Сервер:'* ]]; then
|
||||
printf '%s' "$msg"
|
||||
return 0
|
||||
fi
|
||||
local first rest
|
||||
first="${msg%%$'\n'*}"
|
||||
if [ "$first" = "$msg" ]; then
|
||||
printf '%s\n🖥️ Сервер: %s' "$first" "$(ssh_monitor_server_display_name_with_ip)"
|
||||
else
|
||||
rest="${msg#*$'\n'}"
|
||||
printf '%s\n🖥️ Сервер: %s\n%s' "$first" "$(ssh_monitor_server_display_name_with_ip)" "$rest"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -67,6 +67,7 @@ PY
|
||||
|
||||
notify_send() {
|
||||
local message="$1"
|
||||
message="$(ssh_monitor_message_ensure_server_line "$message")"
|
||||
if send_telegram_raw "$message"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
2.1.8-SAC
|
||||
2.1.9-SAC
|
||||
|
||||
Reference in New Issue
Block a user