Files
ssh-monitor/docs/auto-update.ru.md
T
PapaTramp 2c65edf7db sync: align internal repo with 1.1.3-server-label
- REPO_URL points to git.kalinamall.ru

- ssh-monitor.conf may be committed here (secrets); .env still ignored

- Docs note for closed vs public GitHub
2026-05-26 19:34:01 +10:00

5.0 KiB
Raw Blame History

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

Скрипт update_ssh_monitor.sh в корне репозитория обновляет установленный /usr/local/bin/ssh-monitor из git-репозитория и перезапускает systemd-сервис. Конфиг /etc/ssh-monitor.conf, watchdog и таймеры не изменяются.

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

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

  1. Создаёт рабочий каталог UPDATE_DIR (по умолчанию /opt/scripts/update).
  2. Проверяет наличие ipset; при отсутствии пытается установить через пакетный менеджер (apt, yum, dnf, pacman, zypper). Без ipset скрипт завершается с ошибкой — новая версия монитора с ENABLE_IP_BAN=1 требует ipset.
  3. В UPDATE_DIR выполняет git clone или git pull origin main репозитория.
  4. Ищет файл ssh-monitor в клоне:
    • $UPDATE_DIR/ssh-monitor/src/branch/main/ssh-monitor (структура GitLab);
    • $UPDATE_DIR/ssh-monitor/ssh-monitor (плоский репозиторий, как в этом проекте).
  5. Сравнивает SHA256 удалённого файла с LOCAL_SCRIPT_PATH (по умолчанию /usr/local/bin/ssh-monitor).
  6. При отличии:
    • резервная копия ssh-monitor.backup.YYYYMMDD_HHMMSS;
    • cp + chmod +x;
    • systemctl restart ssh-monitor.service (если есть systemctl).
  7. Пишет лог в LOG_FILE (по умолчанию /var/log/update_script.log).
flowchart LR
  A[cron/timer] --> B[update_ssh_monitor.sh]
  B --> C[git pull/clone]
  C --> D{SHA256 различается?}
  D -->|да| E[backup + cp]
  E --> F[restart ssh-monitor.service]
  D -->|нет| G[без изменений]

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

Отредактируйте переменные в начале update_ssh_monitor.sh:

Переменная По умолчанию Назначение
UPDATE_DIR /opt/scripts/update Каталог для git-клона
REPO_URL https://git.kalinamall.ru/PapaTramp/ssh-monitor.git URL закрытого репозитория (на GitHub в репо — placeholder)
LOCAL_SCRIPT_PATH /usr/local/bin/ssh-monitor Куда копировать бинарник
LOG_FILE /var/log/update_script.log Лог обновлений
DEBUG 0 1 — подробный DEBUG в лог

Требования на сервере:

  • root (или sudo) для cp, systemctl, установки ipset;
  • git и сетевой доступ к репозиторию (SSH-ключ или HTTPS);
  • ветка в скрипте жёстко main — при другой ветке измените git pull в файле.

Установка

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 /opt/scripts/update_ssh_monitor.sh
sudo tail -20 /var/log/update_script.log
sudo systemctl status ssh-monitor

Запуск по расписанию

Cron (пример: каждый день в 04:00)

sudo crontab -e

Добавьте:

0 4 * * * /opt/scripts/update_ssh_monitor.sh

systemd timer (альтернатива)

Создайте /etc/systemd/system/ssh-monitor-update.service:

[Unit]
Description=Update ssh-monitor from git

[Service]
Type=oneshot
ExecStart=/opt/scripts/update_ssh_monitor.sh

И /etc/systemd/system/ssh-monitor-update.timer:

[Unit]
Description=Daily ssh-monitor update

[Timer]
OnCalendar=*-*-* 04:00:00
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now ssh-monitor-update.timer

Откат после неудачного обновления

Резервные копии лежат рядом с установленным скриптом:

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

Ограничения

  • Обновляется только файл ssh-monitor, не конфиг и не watchdog.
  • При недоступном git git pull пишет предупреждение и продолжает с локальной копией.
  • На git.kalinamall.ru в update_ssh_monitor.sh уже задан внутренний REPO_URL; на GitHub остаётся placeholder для форка.