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
