Files
ssh-monitor/docs/auto-update.ru.md
T
PapaTramp 2048162057 feat: release 2.1.8-SAC — security phase 1 and SAC-first update hardening
Updater applies chmod/chown on config, spool and state paths on every run.
SAC is the primary update path; optional cron uses the same behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-08 09:44:24 +10:00

6.6 KiB
Raw Blame History

Автообновление ssh-monitor

Скрипт update_ssh_monitor.sh обновляет /usr/local/bin/ssh-monitor из git и перезапускает systemd-сервис.

Основной путь: Security Alert Center

На продакшен-хостах обновление идёт через SAC, без cron:

  1. Админ нажимает «Обновить ssh-monitor (SSH)» в карточке хоста.

  2. SAC по SSH запускает /opt/scripts/update_ssh_monitor.sh с REPO_URL / GIT_BRANCH из Настройки → Обновления агентов.

  3. Updater сам выполняет git pull, синхронизирует sac-client.sh и watchdog, дописывает отсутствующие ключи в /etc/ssh-monitor.conf, выставляет chmod/chown на конфиг, SAC-spool, счётчики и state-файлы, перезапускает ssh-monitor.service.

Участие админа на сервере не требуется (кроме первичной настройки SAC_URL / SAC_API_KEY в конфиге).

При первой установке (нет updater на хосте) SAC выполняет bootstrap с --deploy: clone, ipset при необходимости, systemd unit, полный hardening.

Cron / systemd timer — опциональная альтернатива с тем же скриптом и обязательным REPO_URL в окружении.

Watchdog и таймеры watchdog не изменяются при обычном update (кроме синхронизации скрипта watchdog из git).

Конфиг /etc/ssh-monitor.conf: при первой установке копируется из ssh-monitor.conf.example. При каждом update в существующий конфиг дописываются отсутствующие SAC-переменные и ключи безопасности; UseSAC=fallback. Telegram/SMTP и прочие ключи не перезаписываются.

Установка монитора и unit-файлов: README.md, зависимости: install-prerequisites.ru.md.

Что делает скрипт

  1. Создаёт рабочий каталог UPDATE_DIR (по умолчанию /opt/scripts/update).

  2. При --deploy / bootstrap SAC проверяет ipset и при отсутствии пытается установить через пакетный менеджер. Обычное обновление не вызывает apt-get.

  3. В UPDATE_DIR выполняет git clone или git pull репозитория.

  4. Ищет ssh-monitor в клоне (GitLab layout или плоский репозиторий).

  5. Сравнивает SHA256 с LOCAL_SCRIPT_PATH (/usr/local/bin/ssh-monitor).

  6. Всегда синхронизирует sac-client.sh, ssh-monitor-perms.sh, watchdog.

  7. Дописывает ключи конфига; apply_runtime_security_hardening: chmod 600 конфиг, 700 spool, 600 state/SAC-файлы, whitelist.

  8. При изменении ssh-monitor, sac-client.sh или конфига — systemctl restart ssh-monitor.service.

  9. Лог: /var/log/update_script.log (блок «Итог обновления», строка security hardening).


flowchart LR

  A[SAC или cron] --> B[update_ssh_monitor.sh]

  B --> C[git pull/clone]

  C --> D[sync sac-client + perms lib]

  C --> E{SHA256 ssh-monitor?}

  D --> F[harden config/spool/state]

  E -->|да| G[backup + cp ssh-monitor]

  E -->|нет| F

  G --> F

  F --> H{что-то изменилось?}

  H -->|да| I[restart ssh-monitor.service]

  H -->|нет| J[без перезапуска]

Настройка перед первым запуском

| Переменная | По умолчанию | Назначение |

|------------|--------------|------------|

| UPDATE_DIR | /opt/scripts/update | Каталог для git-клона |

| REPO_URL | (обязательно) | URL git — задаётся SAC, export или Environment= в cron |

| GIT_BRANCH | main | Ветка для clone/pull |

| LOCAL_SCRIPT_PATH | /usr/local/bin/ssh-monitor | Куда копировать монитор |

| LOG_FILE | /var/log/update_script.log | Лог обновлений |

| UPDATE_VIA_SAC | (опционально) | SAC выставляет 1; при отсутствии бинарника включается --deploy |

Требования: root, git, доступ к репозиторию.

Первичная установка (--deploy)


sudo REPO_URL=https://git.kalinamall.ru/PapaTramp/ssh-monitor.git ./update_ssh_monitor.sh --deploy

# или first_deploy.sh с REPO_URL в окружении

Через SAC bootstrap выполняется автоматически с --deploy.

Установка updater (если не через SAC bootstrap)


sudo mkdir -p /opt/scripts

sudo cp update_ssh_monitor.sh /opt/scripts/update_ssh_monitor.sh

sudo chmod 750 /opt/scripts/update_ssh_monitor.sh

Проверка:


sudo REPO_URL=https://git.kalinamall.ru/PapaTramp/ssh-monitor.git /opt/scripts/update_ssh_monitor.sh

sudo tail -30 /var/log/update_script.log

Запуск по расписанию (опционально)

Cron


0 4 * * * REPO_URL=https://git.kalinamall.ru/PapaTramp/ssh-monitor.git /opt/scripts/update_ssh_monitor.sh

systemd timer

См. предыдущие примеры ssh-monitor-update.service / .timer с Environment=REPO_URL=....

Откат


ls -la /usr/local/bin/ssh-monitor.backup.*

sudo cp /usr/local/bin/ssh-monitor.backup.YYYYMMDD_HHMMSS /usr/local/bin/ssh-monitor

sudo systemctl restart ssh-monitor.service

Ограничения

  • Секреты (SAC_API_KEY, Telegram) SAC не прописывает — только в /etc/ssh-monitor.conf на хосте.

  • При недоступном git git pull пишет предупреждение и продолжает с локальной копией.

  • REPO_URL без дефолта в скрипте — только доверенное зеркало (kalinamall / своё Gitea).