101 lines
3.5 KiB
Bash
Executable File
101 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ==============================================================================
|
|
# SCRIPT DE GERAÇÃO DE CERTIFICADOS SSL EM LOTE
|
|
#
|
|
# Descrição: Este script automatiza a obtenção de certificados Let's Encrypt
|
|
# para todos os sites configurados no Nginx.
|
|
# ==============================================================================
|
|
|
|
# --- Variáveis de Configuração ---
|
|
SITES_DIR="/etc/nginx/sites-available"
|
|
# Use um email válido para as notificações do Let's Encrypt
|
|
ADMIN_EMAIL="operacoes@itguys.com.br"
|
|
|
|
# --- Funções de Ajuda ---
|
|
info() { echo -e "\e[32m[INFO]\e[0m $1"; }
|
|
error() { echo -e "\e[31m[ERRO]\e[0m $1"; }
|
|
warn() { echo -e "\e[33m[AVISO]\e[0m $1"; }
|
|
|
|
# --- Início da Execução ---
|
|
info "Iniciando o processo de geração de certificados para os sites em ${SITES_DIR}..."
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
error "Este script precisa de ser executado como root."
|
|
fi
|
|
|
|
# Arrays para guardar os resultados
|
|
SUCCESS_SITES=()
|
|
FAILED_SITES=()
|
|
|
|
# Percorre cada ficheiro de configuração no diretório de sites disponíveis.
|
|
for file in "$SITES_DIR"/*.conf; do
|
|
# Verifica se é um ficheiro regular.
|
|
if [[ ! -f "$file" ]]; then
|
|
continue
|
|
fi
|
|
|
|
echo ""
|
|
info "----------------------------------------------------------------------"
|
|
info "A processar o ficheiro: $(basename "$file")"
|
|
info "----------------------------------------------------------------------"
|
|
|
|
# Extrai todos os server_names do ficheiro, ignorando os comentados.
|
|
# Esta regex lida com múltiplas linhas de server_name e múltiplos domínios por linha.
|
|
DOMAINS=$(grep -v '^\s*#' "$file" | grep "server_name" | sed 's/server_name//' | sed 's/;//' | xargs)
|
|
|
|
# Se não encontrar nenhum server_name, salta para o próximo ficheiro.
|
|
if [ -z "$DOMAINS" ]; then
|
|
warn "Nenhum 'server_name' encontrado em $file. A ignorar."
|
|
continue
|
|
fi
|
|
|
|
# Constrói a lista de argumentos '-d' para o Certbot.
|
|
CERTBOT_DOMAIN_ARGS=""
|
|
for domain in $DOMAINS; do
|
|
CERTBOT_DOMAIN_ARGS+=" -d $domain"
|
|
done
|
|
|
|
info "Domínios encontrados: $DOMAINS"
|
|
info "A executar o Certbot..."
|
|
|
|
# Executa o Certbot.
|
|
# O comando 'if' verifica o código de saída do Certbot para saber se foi bem-sucedido.
|
|
if sudo certbot --nginx --non-interactive --agree-tos --no-eff-email --redirect ${CERTBOT_DOMAIN_ARGS} -m "$ADMIN_EMAIL"; then
|
|
info "Certificado para os domínios em $(basename "$file") gerado com sucesso!"
|
|
SUCCESS_SITES+=("$(basename "$file")")
|
|
else
|
|
error "Falha ao gerar o certificado para os domínios em $(basename "$file")."
|
|
FAILED_SITES+=("$(basename "$file")")
|
|
fi
|
|
done
|
|
|
|
# --- Relatório Final ---
|
|
echo ""
|
|
echo "======================================================================"
|
|
echo " RELATÓRIO FINAL DE GERAÇÃO DE CERTIFICADOS"
|
|
echo "======================================================================"
|
|
echo ""
|
|
|
|
if [ ${#SUCCESS_SITES[@]} -ne 0 ]; then
|
|
info "Certificados gerados com SUCESSO para:"
|
|
for site in "${SUCCESS_SITES[@]}"; do
|
|
echo " - $site"
|
|
done
|
|
fi
|
|
|
|
echo ""
|
|
|
|
if [ ${#FAILED_SITES[@]} -ne 0 ]; then
|
|
error "FALHA ao gerar certificados para:"
|
|
for site in "${FAILED_SITES[@]}"; do
|
|
echo " - $site"
|
|
done
|
|
warn "Verifique se os registos de DNS para os domínios acima estão a apontar corretamente para este servidor e tente novamente."
|
|
else
|
|
info "Todos os certificados foram gerados sem erros!"
|
|
fi
|
|
|
|
echo ""
|
|
info "Processo concluído."
|