2

У меня есть список хостов и есть несколько хостов. Я хочу использовать 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 ответа2

0

Достаточно близко:

timeout -5s "ssh $line true"

То есть:

  1. Используйте правильные цитаты. timeout `ssh …` не может работать здесь, потому что это означает "запустить 'ssh', захватить его выходные данные, а затем передать выходные данные 'timeout'".

  2. Запустите ssh в "пакетном" режиме, то есть дайте ему команду на запуск. Без него ssh будет работать в интерактивном режиме и будет зависать вечно даже при успешных соединениях.

Вы также можете попробовать:

ssh -o ConnectTimeout=5s $line true
0

ssh имеет ключ -o , который позволяет вам предоставлять дополнительные опции. В частности, здесь используется опция ConnectTimeout , которая принимает аргумент, указанный в секундах:

ssh -o ConnectTimeout=5 123.123.123.123

Кроме того, ConnectionAttempts также может быть полезным для вас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .