Как установить длительность ssh и перенаправить сообщение об ошибке

Как установить длительность ssh и перенаправить сообщение об ошибке

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

То есть:

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

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

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

ssh -o ConnectTimeout=5s $line true

решение2

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

ssh -o ConnectTimeout=5 123.123.123.123

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

Связанный контент