Вы можете написать сценарий для циклического переключения имен хостов и использовать openssl
для проверки сертификатов.
Пример вbash
:
for host in host1.example.com host2.example.com host3.example.com ; do
echo ===== $host =====
openssl s_client -connect $host:443 < /dev/null 2> /dev/null \
| openssl x509 -noout -text \
| grep "Subject Alternative Name" -A2
done
Я бы использовалawk
:
<myfile check_this | awk '
!check_processed {if ($1 == "YES") yes[FNR]; next}
FNR in yes' - check_processed=1 myfile
awk
записывает, какие номера строк вывода check_this
начинаются со слова YES
в хеш-таблице yes
, а затем печатает строки myfile
, номера которых находятся в этой хэш-таблице yes
.
Вариантом отличногоawk
-решения @StéphaneChazelas, которое менее компактно, но, возможно, его легче читать, поскольку оно не обращается к внешней переменной(check_processed
в его нотации ), будет:
$ awk 'FNR == NR {if ($1 == "YES") yes[FNR];next}
FNR != NR && FNR in yes' <(check_this <myfile) myfile
Примечание.:@RakeshSharma отмечает, что одновременное использованиеnext
(1-й строки )и тестаFNR != NR
(2-й строки )является избыточным. Пользователи этого шаблона могут удалить один или другой без изменения вывода, как в:
$ awk 'FNR == NR {if ($1 == "YES") yes[FNR];next}
FNR in yes' <(check_this <myfile) myfile
Мы можем использовать GNU
версию утилиты dc , чтобы в основном реализовать grep -f
функциональность.
dc -e "
$(< myfile check_this | sed -e 's/NO/0/;s/YES/1/' | tac)
[q]sq [p]sp [?z0=qr1=psxz0<?]s?
l?x
" < <(< myfile sed -e 's/.*/[&]/')
В качестве первого шага мы загружаем выходные данные утилиты check_this
, соответствующим образом логически (YES=>1, NO=>0 )и помещаем их в стек. Следующая строка из входного файла считывается и помещается в стек.выведите его, если 2-й элемент стека равен 1.
Затем мы очищаем 2 верхних элемента стека. Повторяйте до eof.
GNU awk, он же gawk+paste:
$ < myfile check_this \
| paste myfile - \
| gawk '/YES$/ && NF--';
$ < myfile check_this \
| perl -lpe '
@ARGV && do{
/YES/ && $h{$.}++;
eof && close(ARGV);
next;
};
print if $h{$.};
' - myfile
GNU sed с включенным режимом extended regex
:
$ < myfile check_this |
sed -nE '
1{:a;H;n;/^(YES|NO)$/ba;}
G;/\n\nYES/P
s/.*\n\n(YES|NO)/\n/;h
' - myfile
сохранить проверку _этого вывода в состоянии удержания и в каждой строке myfile определить, что начальное значение для удержания равно да. Затем напечатайте строку myfile. Вырежьте два ведущих элемента из пространства шаблона и повторно -сохраните (НЕ «восстановите» )шаблон в удерживаемом пространстве.