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

485
Ben

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

Close enough:

timeout -5s "ssh $line true" 

That is:

  1. Use correct quotes. timeout `ssh …` cannot possibly work here, because it means "run 'ssh', capture its output, then give the output to 'timeout'."

  2. Run ssh in "batch" mode, that is, give it a command to run. Without it, ssh will run in interactive mode, and will hang forever even on successful connections.

You could also try:

ssh -o ConnectTimeout=5s $line true 
Благодарю. Я попытался `ssh -o ConnectionTimeout = 5s` c15-0330-01.ad.mtu.edu true. Работает и ничего не возвращается. Но как он может вернуть имя хоста (я новичок в Linux). И когда я подключаюсь к хосту (я знаю, что он не в сети), он возвращает `ssh: connect к хосту c15-0331-01.ad.mtu.edu порт 22: нет маршрута к хосту`. Я хочу сделать это так: когда ssh преуспевает, тогда `echo $ line> host_available`. Ben 8 лет назад 0
0
Jarmund

ssh has the -o switch, which allows you to provide additional options. Of particular use here is the ConnectTimeout option, which takes an arguement specified in seconds:

ssh -o ConnectTimeout=5 123.123.123.123

In addition, ConnectionAttempts might also be useful to you.

Благодарю. Я попытался `ssh -o ConnectionTimeout = 5s` c15-0330-01.ad.mtu.edu true. Работает и ничего не возвращается. Но как он может вернуть имя хоста (я новичок в Linux). И когда я подключаюсь к хосту (я знаю, что он не в сети), он возвращает `ssh: connect к хосту c15-0331-01.ad.mtu.edu порт 22: нет маршрута к хосту`. Я хочу сделать это так: когда ssh преуспевает, тогда `echo $ line> host_available`. Ben 8 лет назад 0

Похожие вопросы