Как установить длительность SSH и перенаправить сообщение об ошибке
У меня есть список хостов и есть несколько хостов. Я хочу использовать ssh для подключения к ним. Я хочу посмотреть, доступен ли хост по времени, которое занимает ssh. Если это займет больше 5 секунд (что означает, что он недоступен). Затем остановите его и перейдите к следующему хосту. Как только хост станет доступен, выведите имя хоста. Ранее я использовал nmap, но ИТ-служба безопасности сказала, что нельзя устанавливать его на рабочий стол в кампусе.
HOSTS=`cat $host_list`
for line in $HOSTS
do
ssh -o ConnectTimeout=5s $line true >> /dev/null
RESULT=$?
if [ $RESULT -eq 0 ]
then
echo $line > succeed.txt
else
echo $line > fail.txt
fi
done
Вышеприведенный скрипт - это все, что я могу сделать. Проблема в том, что когда это не удалось, я хочу перенаправить сообщение об ошибкеssh: connect to host c28-0112-05.ad.mtu.edu port 22: No route to host
, Но я все еще получаю сообщение об ошибке.
2 ответа
SSH имеет -o
переключатель, который позволяет предоставить дополнительные параметры. Особое использование здесь ConnectTimeout
опция, которая принимает аргумент, указанный в секундах:
ssh -o ConnectTimeout=5 123.123.123.123
К тому же, ConnectionAttempts
также может быть полезным для вас.
Достаточно близко:
timeout -5s "ssh $line true"
То есть:
Используйте правильные цитаты.
timeout `ssh …`
здесь не может работать, потому что это означает "запустить 'ssh', перехватить его выходные данные, а затем передать выходные данные 'timeout'".Запустите ssh в "пакетном" режиме, то есть дайте ему команду на запуск. Без него ssh будет работать в интерактивном режиме и будет зависать вечно даже при успешных соединениях.
Вы также можете попробовать:
ssh -o ConnectTimeout=5s $line true