我正在编写一个相当简单的脚本,从keytool证书中提取过期日期,并将其与今天的日期进行比较,如果该日期少于30天,则发送邮件。然而,在我陷入困境的地方是如何使用bash提取到期日期,我正在运行:
keytool -list -v -keystore /usr/java/jdk1.8.0_301-amd64/jre/lib/security/cacerts -storepass <PWD> | grep "until:"它将输出用多行存储的所有证书,如下所示:
Valid from: Tue May 26 01:00:00 IST 2015 until: Sun Jan 17 00:00:00 GMT 2038该计划是从行中提取到期日期,并将其转换为历次、秒数和天数,以帮助在脚本中计算。
请你给我建议一下最好的办法。
发布于 2022-01-21 15:17:42
不知道你所说的“天”是什么意思
...并将其转换为划时代的时间
但是要将其隐藏到划时代的时刻,您可以首先删除所有内容,直到“直到:”为止:
UNTIL=$(keytool ... | grep 'until:' | sed 's/^.*until: //')然后使用date
date -d "${UNTIL}" +%s编辑
好的,对于keystore中的多个条目,您可以修改以下代码片段。在这里,我们读取别名和“直到”日期,这样我们就可以识别我们在每个迭代中工作的证书。您可以修改它以读取其他字段。
KEYSTORE=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts
KEYSTORE_PW=changeit
while read -r ALIAS; do
# ALIAS is in the form: "Alias name: <REST>". We want <REST>.
ALIAS=$(echo ${ALIAS} | cut -d' ' -f3)
# read the next line
read -r UNTIL
# UNTIL is in the form: "Valid from: ... until: <REST>". We want <REST>
UNTIL=$(echo ${UNTIL} | sed 's/^.*until: //')
# convert to epoch
EPOCH=$(date -d "${UNTIL}" +%s)
# do something with it
echo "${ALIAS} --> ${EPOCH}"
done < <(keytool -list -v -keystore "${KEYSTORE}" -storepass "${KEYSTORE_PW}" | grep -E '^Alias name:|^Valid from:')产出如下:
debian:ac_raiz_fnmt-rcm.pem --> 1893456000
debian:accvraiz1.pem --> 1924940257
debian:actalis_authentication_root_ca.pem --> 1916306522
debian:addtrust_external_root.pem --> 1590835718发布于 2022-01-21 15:17:38
首先,您需要将日期提取为字符串,这可以使用awk完成:
date=$(keytool -list -v -keystore /usr/java/jdk1.8.0_301-amd64/jre/lib/security/cacerts -storepass | grep "until:" | awk -F'until:' '{print $2}')然后,可以使用date命令将字符串日期转换为纪元:
epoch=$(date -d "$date" +"%s")https://stackoverflow.com/questions/70803111
复制相似问题