Tạo 1800 ssl trong vòng 1 ngày cho all domain của server ko bị limit

Tạo 1800 ssl trong vòng 1 ngày cho all domain của server ko bị limit là 1 giải pháp hiệu quả cho những ai có nhiều sub domain trên 1 server mà mổi subdomain là 1 host khác nhau , thường thì ssl sẻ giới hạn 50 ssl/domain/tuần

Tạo 1800 ssl trong vòng 1 ngày cho all domain của server ko bị limit
Tạo 1800 ssl trong vòng 1 ngày cho all domain của server ko bị limit

sau nay mình xin chia sẻ cách làm như sau

Bước 1 : Tạo file da_autossl_smart_mainonly.sh

nano /usr/local/directadmin/scripts/da_autossl_smart_mainonly.sh

rồi dán đoạn code dưới vào

#!/bin/bash
# =========================================================
# Smart AutoSSL (Main domain only) + Realtime Display + Colors
# By Trường Phong setup
# =========================================================

LOGFILE="/usr/local/directadmin/scripts/letsencrypt_smart_mainonly.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

# Màu terminal
GREEN="\e[32m"
YELLOW="\e[33m"
BLUE="\e[34m"
CYAN="\e[36m"
RED="\e[31m"
GRAY="\e[90m"
RESET="\e[0m"

echo -e "${CYAN}================= AutoSSL START ($DATE) =================${RESET}"
echo "================= AutoSSL START ($DATE) =================" >> $LOGFILE

USER_PATH="/usr/local/directadmin/data/users"
total_domains=0
processed=0

for user in $(ls $USER_PATH); do
  DOMAIN_DIR="$USER_PATH/$user/domains"
  if [ -d "$DOMAIN_DIR" ]; then
    echo -e "${BLUE}🔍 Checking user: ${user}${RESET}"
    for conf in $DOMAIN_DIR/*.conf; do
      domain=$(grep '^domain=' "$conf" | cut -d= -f2)
      if [ -z "$domain" ]; then
        continue
      fi
      total_domains=$((total_domains+1))

      # Bỏ qua các subdomain không cần xử lý
      if [[ "$domain" =~ ^(www\.|mail\.|ftp\.|pop\.|smtp\.) ]]; then
        echo -e "${GRAY}⏭ SKIP SUBDOMAIN: ${domain}${RESET}"
        echo "[SKIP] Subdomain $domain (user: $user)" >> $LOGFILE
        continue
      fi

      ssl_dir="$DOMAIN_DIR/$domain.ssl"
      cert_file="$ssl_dir/cert.pem"

      # Nếu chưa có SSL
      if [ ! -d "$ssl_dir" ]; then
        echo -e "${CYAN}🌱 NEW SSL: ${domain}${RESET}"
        echo "[NEW] Creating SSL for $domain (user: $user)" >> $LOGFILE
        /usr/local/directadmin/scripts/letsencrypt.sh request $domain 4096 >> $LOGFILE 2>&1
        processed=$((processed+1))
        continue
      fi

      # Nếu có cert.pem, kiểm tra hạn
      if [ -f "$cert_file" ]; then
        expiry_date=$(openssl x509 -enddate -noout -in "$cert_file" | cut -d= -f2)
        expiry_sec=$(date -d "$expiry_date" +%s)
        now_sec=$(date +%s)
        diff_days=$(( (expiry_sec - now_sec) / 86400 ))

        if [ $diff_days -lt 1 ]; then
          echo -e "${YELLOW}🔁 RENEW: ${domain} (expires in ${diff_days} day)${RESET}"
          echo "[RENEW] SSL for $domain expires in $diff_days day(s) → renewing..." >> $LOGFILE
          /usr/local/directadmin/scripts/letsencrypt.sh renew $domain 4096 >> $LOGFILE 2>&1
        else
          echo -e "${GREEN}🟢 AUTO-RENEW: ${domain} (valid ${diff_days} days left)${RESET}"
          echo "[AUTO] SSL for $domain still valid ($diff_days days left) → enabling auto-renew" >> $LOGFILE
          echo "action=letsencrypt&value=issue&domain=$domain&user=$user" >> /usr/local/directadmin/data/task.queue
        fi
      else
        echo -e "${RED}⚠️ MISSING: ${domain} (no cert.pem) → requesting new${RESET}"
        echo "[MISSING] SSL folder exists but cert.pem missing → requesting new for $domain" >> $LOGFILE
        /usr/local/directadmin/scripts/letsencrypt.sh request $domain 4096 >> $LOGFILE 2>&1
      fi
      processed=$((processed+1))
    done
  fi
done

# Reload lại DirectAdmin + OpenLiteSpeed
echo -e "\n${BLUE}🔄 Reloading DirectAdmin + OpenLiteSpeed...${RESET}"
service directadmin restart >/dev/null 2>&1
service lsws restart >/dev/null 2>&1

echo -e "${CYAN}========================================================${RESET}"
echo -e "${GREEN}✅ DONE: $processed domains processed (Total found: $total_domains)${RESET}"
echo -e "${CYAN}========================================================${RESET}"
echo "================= AutoSSL DONE $(date '+%Y-%m-%d %H:%M:%S') =================" >> $LOGFILE

Bước 2 : chmod ,đánh lệnh

chmod +x /usr/local/directadmin/scripts/da_autossl_smart_mainonly.sh

Bước 3 : chạy nó

bash /usr/local/directadmin/scripts/da_autossl_smart_mainonly.sh

Bước 4 : add lệnh auto cron 1 tuần chạy nó 1 lần

echo "0 2 * * * /usr/local/directadmin/scripts/da_autossl_smart_mainonly.sh >/dev/null 2>&1" >> /var/spool/cron/root

🕑 Chạy 1 lần/tuần vẫn đảm bảo SSL luôn được tự động gia hạn kịp thời
⚙️ Không gây tải, không bị limit, an toàn nhất cho server

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận