适用有大量域名需要查看过期信息的脚本

举报
fsifdds 发表于 2023/08/26 15:54:04 2023/08/26
【摘要】 场景:有大量域名需要查看过期信息需要一个domain.txta.xx.comd.xx.comg.com再同一个目录加check_domain.sh#!/bin/bash########################################################## Action :获取域名的ssl证书过期信息 ## modifi...

场景:有大量域名需要查看过期信息

需要一个domain.txt

a.xx.com
d.xx.com
g.com

再同一个目录加check_domain.sh

#!/bin/bash
#########################################################
# Action   :获取域名的ssl证书过期信息                     #
# modific  :需要维护domain.txt                           #
#########################################################

################
#获取域名ip
##################
get_and_store_ips(){
output_file="domain2.txt"

# 清空或创建 domain2.txt 文件
> "$output_file"

# 读取 domain.txt 文件的每一行
while IFS=: read -r domain _; do
    # 使用 dig 命令查询域名对应的IP地址
    ip=$(dig +short "$domain")

    # 如果查询到了IP地址,将域名:IP写入 domain2.txt 文件
    if [ -n "$ip" ]; then
        echo "${domain}:${ip}" >> "$output_file"
    fi
done < domain.txt

echo "域名和IP已写入 $output_file 文件"
}

###########
#查域名证书过期时间
#########
get_and_store_ips

for line in $(cat domain2.txt)
do
        domain=$(echo ${line} | awk -F':' '{print $1}')
        ip_pool=$(echo ${line} | awk -F '[a-z]:' '{print $2}' | sed 's/\,/ /g')
        for ip in ${ip_pool}
        do
                echo -e "\e[33m---------------start to check---------------\e[0m"
                echo -e "ip:${ip}\ndomain:${domain}"
                
                text=$(echo | openssl s_client -servername ${domain} -connect ${ip}:443 2>/dev/null | openssl x509 -noout -dates )
                # 判断命令是否执行成功,执行成功的话 text 变量里面是有内容的
                if [[ ${text} ]] 
                then
                    end_date=$(echo "$text" | grep -i "notAfter" | awk -F '=' '{print $2}') # 证书过期时间
                    end_timestamp=$(date -d "$end_date" +%s) # 转换成时间戳
                    
                    current_timestamp=$(date +%s) # 当前时间戳
                    
                    # 如果证书过期时间减去当前时间的天数小于七天的话,则提示需要准备更换证书了
                    remain_date=$(( (${end_timestamp} - ${current_timestamp}) / 86400 ))
                    if [[ ${remain_date} -lt 7 && ${remain_date} -ge 0 ]]
                    then
                        echo -e "\e[31m剩余时间小于七天!请及时更换证书!\e[0m"
                        echo -e "\e[31mip: ${ip}, ${domain}\e[0m"
                    elif [[ ${remain_date} -lt 0 ]]
                    then
                        echo -e "\e[31m证书已过期!请及时更换证书!\e[0m"
                    else
                        echo -e "\e[32m剩余天数为:${remain_date}\e[0m"
                    fi
                else
                            echo -e "\e[31mError!${ip}\e[0m"
                            echo -e "\e[31m${domain}\e[0m"
                fi
        done
done


然后 sh check_domain.sh 即可。会输出每个域名的过期时间。然后7天内过期的会高亮


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。