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

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