换掉域名 换掉ssl证书存储位置能直接用 也可以直接使用默认生成后的位置
#!/bin/bash
# 定义变量
#certbot生成的ssl证书存放位置
Ssl_home="/etc/letsencrypt/live"
#nginx配置的ssl证书存放位置,也可以在nginx配置文件里直接写$Ssl_home的位置
Nginx_Ssl_home="/workserver/work-local/nginx/nginx-conf.d/ssl"
#定义你要监控并更新的域名
domains=( "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com" "xxxx.xxxx.com")
#生效钉钉通知(网络皇帝机器人)
source /workserver/work-local/sys_bash_alarm/SslTz.sh
# 检查证书是否将在30天内过期
check_expiry() {
local domain="$1"
local ssl_file="ssl_${domain}.txt"
local expire_date=$(awk '/expire date:/ {print $4, $5, $6, $7}' "$ssl_file")
# 提取月份、日期和年份
local month=$(echo "$expire_date" | awk '{print $1}')
local day=$(echo "$expire_date" | awk '{print $2}')
local year=$(echo "$expire_date" | awk '{print $4}')
case $month in
"1月" | "Jan") month="01" ;;
"2月" | "Feb") month="02" ;;
"3月" | "Mar") month="03" ;;
"4月" | "Apr") month="04" ;;
"5月" | "May") month="05" ;;
"6月" | "Jun") month="06" ;;
"7月" | "Jul") month="07" ;;
"8月" | "Aug") month="08" ;;
"9月" | "Sep") month="09" ;;
"10月" | "Oct") month="10" ;;
"11月" | "Nov") month="11" ;;
"12月" | "Dec") month="12" ;;
esac
# 格式化过期日期
local formatted_expire_date="$year-$month-$day"
#echo "格式化后过期日期 ($domain): $formatted_expire_date"
local current_date=$(date +%F)
#echo "当前日期: $current_date"
# 将日期字符串转换为时间戳(秒)
local timestamp1=$(date -d "$formatted_expire_date" +%s)
local timestamp2=$(date -d "$current_date" +%s)
# 计算日期差值(秒)和 差值对应的天数
local difference=$((timestamp1 - timestamp2))
local days_difference=$((difference / 86400)) # 86400 秒是一天的秒数
if [ $days_difference -le 30 ]; then
certbot certonly --nginx -d "$domain" --force-renew 2>&1 >> /dev/null
cp -f "$Ssl_home/$domain/fullchain.pem" "$Nginx_Ssl_home/$domain/pem.pem"
cp -f "$Ssl_home/$domain/privkey.pem" "$Nginx_Ssl_home/$domain/key.key"
nginx -s reload
echo "$domain 的 SSL 证书将在30天内过期!过期时间是 $formatted_expire_date 已触发自动更新证书脚本,请访问$domain进行检查"
fi
}
# 创建一个空数组,用于存储所有警告信息
warnings=()
# 循环检查每个域名的证书
for domain in "${domains[@]}"; do
#echo "正在检查 $domain 的证书..."
curl "https://$domain" -k -v -s -o /dev/null 2> "/opt/ssl_check.dir/ssl_${domain}.txt"
warning=$(check_expiry "$domain") # 调用函数并获取返回值
if [ -n "$warning" ]; then
warnings+=("$warning") # 将警告信息添加到数组中
fi
done
# 检查是否有警告信息,如果有则一次性发送到钉钉
if [ ${#warnings[@]} -gt 0 ]; then
# 将警告信息合并成一个字符串
message=$(printf "%s\n" "${warnings[@]}")
# 发送到钉钉
sendLong "$Long$message"
else
echo "所有域名的 SSL 证书都还有足够的时间。"
fi