touch /etc/ejabberd/ejabberd.sh
#!/bin/bash
# ejabberd SSL tanúsítvány szinkronizáló script
# Használat: /usr/local/bin/ejabberd-cert-sync.sh
# Konfigurációs változók
LETSENCRYPT_DIR="/etc/letsencrypt/live"
EJABBERD_CERT_DIR="/etc/ejabberd/certs"
EJABBERD_USER="ejabberd"
EJABBERD_GROUP="ejabberd"
LOG_FILE="/var/log/ejabberd-cert-sync.log"
# Logging függvény (kikapcsolható)
ENABLE_LOGGING=false # true = logging BE, false = logging KI
log() {
if [[ "$ENABLE_LOGGING" == "true" ]]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
fi
}
# Ellenőrizzük, hogy root-ként futunk-e
if [[ $EUID -ne 0 ]]; then
log "HIBA: Ezt a scriptet root-ként kell futtatni!"
exit 1
fi
log "=== ejabberd tanúsítvány szinkronizálás indítása ==="
# Létrehozzuk a cél könyvtárat ha nem létezik
if [[ ! -d "$EJABBERD_CERT_DIR" ]]; then
mkdir -p "$EJABBERD_CERT_DIR"
log "Létrehozva: $EJABBERD_CERT_DIR"
fi
# Változók a változások követéséhez
COPIED_COUNT=0
ERROR_COUNT=0
# Végigmegyünk az összes Let's Encrypt tanúsítványon
for domain_dir in "$LETSENCRYPT_DIR"/*; do
if [[ -d "$domain_dir" ]]; then
domain=$(basename "$domain_dir")
# Kihagyás ha ez a README könyvtár
if [[ "$domain" == "README" ]]; then
log " Kihagyva: README könyvtár"
continue
fi
# Ellenőrizzük, hogy léteznek-e a szükséges fájlok
if [[ -f "$domain_dir/fullchain.pem" && -f "$domain_dir/privkey.pem" ]]; then
log "Feldolgozás: $domain"
# Másolás fullchain.pem
if cp "$domain_dir/fullchain.pem" "$EJABBERD_CERT_DIR/${domain}.pem"; then
log " ✓ Másolva: ${domain}.pem"
else
log " ✗ HIBA: ${domain}.pem másolása sikertelen"
((ERROR_COUNT++))
continue
fi
# Másolás privkey.pem
if cp "$domain_dir/privkey.pem" "$EJABBERD_CERT_DIR/${domain}-key.pem"; then
log " ✓ Másolva: ${domain}-key.pem"
else
log " ✗ HIBA: ${domain}-key.pem másolása sikertelen"
((ERROR_COUNT++))
continue
fi
# Kombinált fájl létrehozása (fullchain + privkey)
if cat "$domain_dir/fullchain.pem" "$domain_dir/privkey.pem" > "$EJABBERD_CERT_DIR/${domain}-combined.pem"; then
log " ✓ Létrehozva: ${domain}-combined.pem"
else
log " ✗ HIBA: ${domain}-combined.pem létrehozása sikertelen"
((ERROR_COUNT++))
fi
((COPIED_COUNT++))
else
log " ⚠ Kihagyva: $domain (hiányzó fájlok)"
fi
fi
done
# Jogosultságok beállítása
log "Jogosultságok beállítása..."
# Mappa jogosultságok
chown -R "$EJABBERD_USER:$EJABBERD_GROUP" "$EJABBERD_CERT_DIR"
chmod 750 "$EJABBERD_CERT_DIR"
# Fájl jogosultságok
find "$EJABBERD_CERT_DIR" -name "*.pem" -exec chmod 640 {} \;
log "✓ Jogosultságok beállítva: $EJABBERD_USER:$EJABBERD_GROUP"
# ejabberd újratöltése (ha futott változás)
if [[ $COPIED_COUNT -gt 0 ]]; then
log "ejabberd konfigurációjának újratöltése..."
if systemctl is-active --quiet ejabberd; then
if systemctl reload ejabberd; then
log "✓ ejabberd újratöltve"
else
log "✗ HIBA: ejabberd újratöltése sikertelen"
((ERROR_COUNT++))
fi
else
log "⚠ ejabberd nem fut, újratöltés kihagyva"
fi
fi
# Összesítés
log "=== Szinkronizálás befejezve ==="
log "Feldolgozott domainok: $COPIED_COUNT"
log "Hibák száma: $ERROR_COUNT"
# Fájlok listázása
log "Létrehozott fájlok:"
ls -la "$EJABBERD_CERT_DIR"/*.pem 2>/dev/null | while read line; do
log " $line"
done
# Hibakód visszaadása
if [[ $ERROR_COUNT -gt 0 ]]; then
exit 1
else
exit 0
fi
0 3 * * * /etc/ejabberd/ejabberd.sh >/dev/null 2>&1
nano /etc/ejabberd/ejabberd.yml and set
certfiles:
- “/etc/ejabberd/certs/*.pem”