Я написал небольшой вкладыш в bash, чтобы выплескивать версии openssl на моих серверах (checking if I'm protected against this most recent openssl vulnerability), но если SSH не может подключиться и раз out, это останавливает остальную часть скрипта от выполнения. Я знаю достаточно баха, чтобы обойти, но я не совсем уверен, что нужно сделать здесь, чтобы заставить его продолжить, возможно, захватить SIGTERM и продолжить с того места, где я остановился ? Я уверен, что есть более простой способ ..xargs sh -c 'ssh ...' прекращение выполнения, когда какое-либо время соединения отключено
Вот команда:
cat servers.txt | \
xargs -I {} sh -c "echo {} && ssh -o ConnectTimeout=3 [email protected]{} openssl version"
Где servers.txt
это просто большой список IP-адресов, по одному в строке
@CharlesDuffy не знал, что о xargs, спасибо! – bruchowski
Вы должны ** никогда ** не расширять '{}' непосредственно в 'sh -c' или подобный скрипт. Это небезопасно. Вместо этого вы должны передать '{}' в качестве аргумента для оболочки и использовать соответствующие позиционные аргументы в сценарии оболочки. Страница man для 'xargs' указывает, что она должна останавливать всю цепочку выполнения, если внутренний процесс завершается с кодом выхода' 255'. Я бы не ожидал, что 'ssh' сделает это, но может быть, и здесь. Просто добавляет '|| выйти 1' в скрипт «исправить» проблему? –
(в другой точке 'sh' - это POSIX sh, а не bash - даже если/bin/sh является ссылкой на/bin/bash, при запуске он отключает кучу функций, просто' sh' или 'shell' является соответствующим тегом, если не * явно * с использованием bash). –