bea39a6ef5
- 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 Co-authored-by: Cursor <cursoragent@cursor.com>
5.0 KiB
5.0 KiB
Автообновление 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.
Что делает скрипт
- Создаёт рабочий каталог
UPDATE_DIR(по умолчанию/opt/scripts/update). - Проверяет наличие
ipset; при отсутствии пытается установить через пакетный менеджер (apt, yum, dnf, pacman, zypper). Без ipset скрипт завершается с ошибкой — новая версия монитора сENABLE_IP_BAN=1требует ipset. - В
UPDATE_DIRвыполняетgit cloneилиgit pull origin mainрепозитория. - Ищет файл
ssh-monitorв клоне:$UPDATE_DIR/ssh-monitor/src/branch/main/ssh-monitor(структура GitLab);$UPDATE_DIR/ssh-monitor/ssh-monitor(плоский репозиторий, как в этом проекте).
- Сравнивает SHA256 удалённого файла с
LOCAL_SCRIPT_PATH(по умолчанию/usr/local/bin/ssh-monitor). - При отличии:
- резервная копия
ssh-monitor.backup.YYYYMMDD_HHMMSS; cp+chmod +x;systemctl restart ssh-monitor.service(если есть systemctl).
- резервная копия
- Пишет лог в
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 для форка.