Estou tendo uma saída semelhante ao arquivo (nome do arquivo qualquer.com) abaixo...
[...]~ # tmsh list sys file ssl-cert whatever.com_2024
sys file ssl-cert whatever.com_2024 {
certificate-key-size 2048
checksum SHA1:2520:ab40df7776dbbccb62345560511f2205d
create-time 2024-08-12:19:34:07
created-by x.y
expiration-date 1754956799
expiration-string "Aug 11 23:59:59 2025 GMT"
fingerprint SHA256/D8:57:8E:8E:4A:1A:C3:3C:1B:6F:32:59:A7:36:66:92:6C
issuer "CN=DigiCert Global G2 TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US"
key-type rsa-public
last-update-time 2024-08-12:19:34:07
mode 33188
revision 1
serial-number 0a:1d:ca:c7:09:7b:49:59:b2
size 2520
source-path /var/run/key_mgmt/RvGubB/ssl.crt/whatever.com_2024
subject "CN=whatever.com,O=XYZ,L=Toronto,ST=Ontario,C=CA"
subject-alternative-name "DNS:whatever.com"
updated-by x.y
version 3
Estou tentando gerar uma saída de comando com base nas informações acima na linha 17 (começando com o assunto)
cat whatever.com | awk 'BEGIN {F=" "; FS = "\n"; RS = ""; OFS = "\n"} { print "openssl req -new -nodes -sha256 -newkey rsa:2048 -out "substr($1,RSTART+19,length($1)-25)"_2025.csr -keyout "substr($1,RSTART+19,length($1)-25)"_2025.key -subj "/"substr($17,RSTART+14,length($17)-14)"\""}'
A saída está parecendo boa
openssl req -new -nodes -sha256 -newkey rsa:2048 -out whatever.com_2025.csr -keyout whatever.com_2025.key -subj "/CN=whatever.com,O=XYZ,L=Toronto,ST=Ontario,C=CA"
No entanto, ele está usando uma substring da linha 1 que pode ser diferente da linha 17, então eu gostaria de obter o nome do arquivo em vez de usar substr($1,RSTART+19,length($1)-24) para ser gerado com base na string do formulário $17 entre "CN=" e ",O=".
Também seria possível modificar a saída para ficar assim se a linha 18 contivesse a string "DNS"...
openssl req -new -nodes -sha256 -newkey rsa:2048 -out whatever.com_2025.csr -keyout whatever.com_2025.key -subj "/CN=whatever.com,O=XYZ,L=Toronto,ST=Ontario,C=CA" -addext "subjectAltName = DNS:whatever.com"
Obrigado por todas as respostas rápidas. Os nomes de arquivo devem ser gerados dinamicamente a partir do arquivo. O exemplo incluso é apenas uma pequena seção da saída maior. A configuração BEGIN está lá para criar essas seções que, nesse ponto, podem ser manipuladas individualmente por linha.
Lidando com balanceadores de carga F5. Eles são baseados em Linux, mas não são exatamente construídos como servidores normais, o que torna alguns dos scripts desafiadores.
Eu encontrei uma solução usando split() mas agora tenho um problema diferente. Quando eu executo o comando sozinho, parece funcionar
~ # cat whatever.com | awk 'BEGIN {F=" "; FS = "\n"; RS = ""; OFS = "\n"} {split($17,a,/,/); print substr(a[1],RSTART+17)}'
whatever.com
Entretanto, quando adicionado ao script original, ele acrescenta o número "5" na frente.
~ # cat whatever.com | awk 'BEGIN {F=" "; FS = "\n"; RS = ""; OFS = "\n"} { print "openssl req -new -nodes -sha256 -newkey rsa:2048 -out "split($17,a,/,/); print substr(a[1],RSTART+17)"_2025.csr -keyout "split($17,a,/,/); print substr(a[1],RSTART+17)"_2025.key -subj \"/"substr($17,RSTART+14,length($17)-14)"\""}'
openssl req -new -nodes -sha256 -newkey rsa:2048 -out 5
whatever.com_2025.csr -keyout 5
whatever.com_2025.key -subj "/CN=whatever.com,O=XYZ,L=Toronto,ST=Ontario,C=CA"