mirror of
https://gitverse.ru/kpa39l/xmpp-server-prosody.git
synced 2026-09-29 09:45:02 +00:00
42 lines
2.6 KiB
Bash
42 lines
2.6 KiB
Bash
#!/bin/bash
|
|
# Silent LE-cert watchdog for manual dns-01 renewal (Prosody reading certs/<domain>.crt).
|
|
# Cron contract (Hermes no_agent cron): empty stdout = SILENT (nothing delivered to the user);
|
|
# non-empty stdout is delivered verbatim. So stay quiet until renewal is actually due.
|
|
# Deployed copy (ICQ): /opt/hermes/.hermes/scripts/check_icq_cert.sh, cron job ca2a23a34905,
|
|
# daily 0 10 * * *, deliver=telegram:<chat_id> (explicit target required from CLI sessions).
|
|
# Usage: check_icq_cert.sh [CERT_PATH] (default /opt/icq/certs/nixg.ru.crt)
|
|
# Override: THRESHOLD=30 check_icq_cert.sh (days before expiry to start shouting)
|
|
CERT="${1:-/opt/icq/certs/nixg.ru.crt}"
|
|
THRESHOLD="${THRESHOLD:-45}"
|
|
|
|
if [ ! -f "$CERT" ]; then
|
|
echo "⚠️ ОТСУТСТВУЕТ сертификат $CERT — XMPP c2s/s2s скоро перестанет работать!"
|
|
echo "Проверь бэкап и восстанови (см. backup.sh)."
|
|
exit 0
|
|
fi
|
|
|
|
END=$(openssl x509 -enddate -noout -in "$CERT" | cut -d= -f2)
|
|
END_EPOCH=$(date -d "$END" +%s)
|
|
NOW_EPOCH=$(date +%s)
|
|
DAYS=$(( (END_EPOCH - NOW_EPOCH) / 86400 ))
|
|
|
|
if [ "$DAYS" -gt "$THRESHOLD" ]; then
|
|
exit 0 # тишина: до истечения больше порога, напоминание не нужно
|
|
fi
|
|
|
|
# ---- Шумим: до истечения <= THRESHOLD дней ----
|
|
echo "🔐 LE-сертификат истекает через ${DAYS} дн. (${END}). Нужно продлить вручную через dns-01:"
|
|
echo ""
|
|
echo "1. sudo certbot renew --manual-auth-hook /bin/true --manual-cleanup-hook /bin/true"
|
|
echo " → он напечатает НОВЫЕ TXT-значения для _acme-challenge.nixg.ru и _acme-challenge.xmpp.nixg.ru"
|
|
echo "2. Добавить эти TXT-записи в панели DNS (заменить старые)"
|
|
echo "3. Подождать 1–2 мин, проверить: dig @1.1.1.1 _acme-challenge.nixg.ru TXT +short"
|
|
echo "4. Повторить ту же команду certbot renew — сертификат продлится"
|
|
echo "5. Скопировать свежий серт:"
|
|
echo " sudo cp -L /etc/letsencrypt/live/nixg.ru/fullchain.pem /opt/icq/certs/nixg.ru.crt"
|
|
echo " sudo cp -L /etc/letsencrypt/live/nixg.ru/privkey.pem /opt/icq/certs/nixg.ru.key"
|
|
echo "6. Перезапустить Prosody: cd /opt/icq && docker compose restart prosody"
|
|
echo "7. Проверить: openssl x509 -enddate -noout -in /opt/icq/certs/nixg.ru.crt"
|
|
|
|
# Домашняя проверка (офлайн): запусти с THRESHOLD=100 → должен зашуметь; обычный запуск → пустой вывод.
|