
У меня есть список хостов, и в нем есть несколько хостов. Я хочу использовать ssh для подключения к ним. Я хочу посмотреть, доступен ли хост или нет по времени, которое занимает ssh. Если это занимает больше 5 секунд (это означает, что он недоступен). Тогда остановите его и подключитесь по ssh к следующему хосту. Как только хост станет доступен, выведите имя хоста. Раньше я использовал 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
. Но я все равно получаю сообщение об ошибке.
решение1
Достаточно близко:
timeout -5s "ssh $line true"
То есть:
Используйте правильные кавычки.
timeout `ssh …`
здесь не может работать, так как это означает «запустить 'ssh', захватить его вывод,затемустановите для вывода значение «timeout».Запустить ssh в "пакетном" режиме, то есть дать ему команду на запуск. Без этого ssh будет работать в интерактивном режиме, и будет зависать вечно даже при успешных соединениях.
Вы также можете попробовать:
ssh -o ConnectTimeout=5s $line true
решение2
ssh имеет -o
переключатель, который позволяет вам предоставлять дополнительные параметры. Здесь особенно полезен ConnectTimeout
параметр, который принимает аргумент, указанный в секундах:
ssh -o ConnectTimeout=5 123.123.123.123
Кроме того, ConnectionAttempts
это также может быть полезно для вас.