我试图在某种程度上自动化F5设备上的证书包更新。没有一个命令可以检查SSL包是否过期,并将其与服务器SSL配置文件名称匹配。因此,我试图使用greps (正如我所知道的那样)执行以下两个命令:
tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}'这将给出一个过期包名的输出,每行一个,如下所示
Common/somebundle.crt
Common/someotherbundlename.crt
Common/whoknowswhatthisbundleisfor.crttmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain'此命令将获得所有服务器-ssl配置文件名称的列表及其到certs/bundle等的链接。我使用| grep Common/somebundle.crt -B 1只向我提供命令1输出中特定输出的信息。因此命令2变成:tmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain' | grep Common/somebundle.crt -B 1,然后我必须手动重复命令1输出中找到的每个包。
我试图以某种方式使用命令1,然后使用xargs (或我可以运行的任何东西)来运行命令2,将输出从1传递到2中的grep中。
它不一定非得是一行,我只是不知道bash能不能写一个脚本。
我创造了一些有用的东西,虽然看起来不太干净
for i in $(tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}'); do echo -n "$i -> "; tmsh -c "cd /;list ltm profile server-ssl recursive" | grep -B20 $i >> /dev/null || echo "Not Found" && tmsh -c "cd /;list ltm profile server-ssl recursive" | grep -B20 $i |grep -i "ltm profile" | tail -n1 | awk -F "{" '{print $1}' ; done发布于 2022-02-09 06:11:20
使用bash while循环和read函数应该是可能的。您可以将第一个命令导入while循环,逐行读取输出:
tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}' | while read bundle;do tmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain' | grep "$bundle" -B 1 |...do whatever else is needed ;done它还可以拆分成正常的多行脚本:
tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}' | while read bundle
do
echo "===== $bundle ===="
tmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain' | grep "$bundle" -B 1 |...do whatever else is needed
donehttps://stackoverflow.com/questions/70966133
复制相似问题