欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本實現(xiàn)SSL證書過期巡檢

 更新時間:2023年08月04日 10:21:17   作者:咸魚Linux運維  
我們知道?SSL?證書是會過期的,一旦過期之后需要重新申請,如果沒有及時更換證書的話,就有可能導(dǎo)致網(wǎng)站出問題,所以本文分享一個自動檢測?SSL?是否過期的?shell?腳本吧

我們知道 SSL 證書是會過期的,一旦過期之后需要重新申請。如果沒有及時更換證書的話,就有可能導(dǎo)致網(wǎng)站出問題,給公司業(yè)務(wù)帶來一定的影響

所以說我們要每隔一定時間去檢查網(wǎng)站上的 SSL 證書是否過期

如果公司業(yè)務(wù)體量較大的話,肯定不止一個域名,而一個域名后面又會對應(yīng)著多臺機器,如果我們手動輸入命令一臺臺檢測的話,所需要的精力和時間是很大的

那么今天咸魚跟大家介紹一個自己平常在用的自動檢測 SSL 是否過期的 shell 腳本

思路

前面我們說到,一個公司(一個業(yè)務(wù))底下可能會有多個域名多個 IP 地址,所以說我們需要整理出來放到一個文件里面,如下所示

#domain.txt
#域名:ip 池
www.baidu.com:180.101.50.242,180.101.50.188
www.bing.com:202.89.233.101,202.89.233.100

整理出來之后,后面只需要循環(huán)遍歷 domain.txt 中的每一行內(nèi)容,然后把域名和 ip 地址分別提取出來一個一個去檢測就行了

首先我們對 domain.txt 中的內(nèi)容進行循環(huán)遍歷,提取出域名和 ip 池

for line in $(cat domain.txt)
do
	domain=$(echo ${line} | awk -F':' '{print $1}')
	ip_pool=$(echo ${line} | awk -F '[a-z]:' '{print $2}' | sed 's/\,/ /g')
	...
done

然后再遍歷 ip 池,取出每一個 ip 地址,然后執(zhí)行檢測命令,把檢測到的結(jié)果存進 text 變量里

for line in $(cat domain.txt)
do
	domain=$(echo ${line} | awk -F':' '{print $1}')
	ip_pool=$(echo ${line} | awk -F '[a-z]:' '{print $2}' | sed 's/\,/ /g')
	# 遍歷 ip 池
    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 -subject)
    done
done

我們著重看下檢測命令

echo | openssl s_client -servername ${domain} -connect ${ip}:443 2>/dev/null | openssl x509 -noout -dates -subject
  • echo: 這個命令用于向標準輸出打印一個空行
  • openssl s_client -servername www.baidu.com -connect 180.101.50.242:443: 這部分命令使用 openssl 工具來建立一個與指定網(wǎng)站的 SSL 連接。 -servername選項指定了要連接的服務(wù)器的主機名-connect 選項指定了服務(wù)器的 IP 地址和端口號)
  • 2>/dev/null: 這部分是重定向,將標準錯誤輸出重定向到 /dev/null 設(shè)備文件,這樣連接服務(wù)器的時候如果報錯錯誤信息就不會顯示在終端上
  • openssl x509 -noout -dates: 這部分命令用于提取 SSL 證書的有效期和主題信息。openssl x509是用于處理 X.509 證書的命令,-noout選項表示不打印證書本身,而是打印其他信息,-dates 選項表示打印證書的有效期

輸出信息如下(即 text 變量內(nèi)容)

# echo | openssl s_client -servername www.baidu.com -connect 180.101.50.242:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jul  6 01:51:06 2023 GMT
notAfter=Aug  6 01:51:05 2024 GMT

其中 notBefore 是開始時間,notAfter 是過期時間

需要注意的是,如果提取不到 SSL 證書的信息,那么 text 里面是沒有內(nèi)容的,所以在檢測過期時間之前我們需要判斷一下

if [[ ${text} ]] # text 里面有內(nèi)容,不為空
then
	do something
fi

然后我們提取出輸出的 SSL 證書信息中 notAfter 的值,然后轉(zhuǎn)換成時間戳的形式,并且求出當(dāng)前的時間戳

end_date=$(echo "$text" | grep -i "notAfter" | awk -F '=' '{print $2}') # 證書過期時間
end_timestamp=$(date -d "$end_date" +%s) # 轉(zhuǎn)換成時間戳
current_timestamp=$(date +%s) # 當(dāng)前時間戳

最后我們用過期時間減去當(dāng)前時間,得出剩余時間,再對剩余時間做判斷

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剩余天數(shù)為:${remain_date}\e[0m"
fi

我們來看下執(zhí)行結(jié)果:

證書未過期情況

證書快過期

證書已過期

完整腳本

for line in $(cat domain.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 )
                # 判斷命令是否執(zhí)行成功,執(zhí)行成功的話 text 變量里面是有內(nèi)容的
                if [[ ${text} ]] 
                then
                    end_date=$(echo "$text" | grep -i "notAfter" | awk -F '=' '{print $2}') # 證書過期時間
                    end_timestamp=$(date -d "$end_date" +%s) # 轉(zhuǎn)換成時間戳
                    current_timestamp=$(date +%s) # 當(dāng)前時間戳
                    # 如果證書過期時間減去當(dāng)前時間的天數(shù)小于七天的話,則提示需要準備更換證書了
                    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剩余天數(shù)為:${remain_date}\e[0m"
                    fi
                else
                            echo -e "\e[31mError!${ip}\e[0m"
                            echo -e "\e[31m${domain}\e[0m"
                fi
        done
done

到此這篇關(guān)于Shell腳本實現(xiàn)SSL證書過期巡檢的文章就介紹到這了,更多相關(guān)SSL證書過期巡檢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Shell編程條件測試的實現(xiàn)

    Shell編程條件測試的實現(xiàn)

    Shell腳本的條件測試可以用于測試字符串、文件狀態(tài)和數(shù)字。本文就詳細的介紹一下Shell編程條件測試,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • linux命令切換目錄的使用方法

    linux命令切換目錄的使用方法

    切換目錄的方式有很多種,最常用的莫過于cd 命令了,這里介紹四個命令pushd,popd,dirs,cd -的使用方法
    2014-01-01
  • bash shell和dash shell的區(qū)別詳解

    bash shell和dash shell的區(qū)別詳解

    本文主要介紹了bash shell和dash shell的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Linux查找占用的端口,并終止進程的方法

    Linux查找占用的端口,并終止進程的方法

    下面小編就為大家?guī)硪黄狶inux查找占用的端口,并終止進程的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Shell腳本bash: ./t.sh:/bin/bash^M:損壞的解釋器: 沒有那個文件或目錄

    Shell腳本bash: ./t.sh:/bin/bash^M:損壞的解釋器: 沒有那個文件或目錄

    這篇文章主要介紹了Shell腳本bash: ./t.sh:/bin/bash^M:損壞的解釋器: 沒有那個文件或目錄,需要的朋友可以參考下
    2015-04-04
  • 在多個?Linux?服務(wù)器上運行多個命令的操作指南

    在多個?Linux?服務(wù)器上運行多個命令的操作指南

    如果你正在管理多臺?Linux?服務(wù)器,并且你想在所有?Linux?服務(wù)器上運行多個命令,但你不知道該怎么做,不用擔(dān)心,本文我們將向您展示如何在多個?Linux?服務(wù)器上同時運行多個命令,需要的朋友可以參考下
    2023-07-07
  • Linux下使用Shell腳本實現(xiàn)進程監(jiān)控的流程

    Linux下使用Shell腳本實現(xiàn)進程監(jiān)控的流程

    這篇文章主要介紹了Linux下使用Shell腳本實現(xiàn)進程監(jiān)控,在 Linux 平臺下,shell 腳本監(jiān)控是一個非常簡單、方便的工具,它可以有效的對服務(wù)器、進程進行監(jiān)控,對系統(tǒng)開發(fā)以及進程維護人員非常有幫助,需要的朋友可以參考下
    2023-02-02
  • win10下如何運行.sh文件的實現(xiàn)步驟

    win10下如何運行.sh文件的實現(xiàn)步驟

    這篇文章主要介紹了win10下如何運行.sh文件的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Gearman::XS在Centos下的編譯安裝方法

    Gearman::XS在Centos下的編譯安裝方法

    這篇文章主要介紹了Gearman::XS在Centos下的編譯安裝方法,需要的朋友可以參考下
    2014-07-07
  • Linux shell命令統(tǒng)計某列去重后的值

    Linux shell命令統(tǒng)計某列去重后的值

    今天小編就為大家分享一篇關(guān)于Linux shell命令統(tǒng)計某列去重后的值,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論