Como definir um período de tempo de ssh e redirecionar a mensagem de erro

Como definir um período de tempo de ssh e redirecionar a mensagem de erro

Eu tenho uma lista de hosts e existem vários hosts. Quero usar o ssh para me conectar a eles. Quero ver se o host está disponível ou não pelo tempo que o ssh leva. Se demorar mais de 5s (o que significa que não está disponível). Então pare e faça ssh para o próximo host. Quando um host estiver disponível, digite o nome do host. Anteriormente, eu uso o nmap, mas a segurança de TI informou que não é permitido instalá-lo no desktop do campus.

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

O script acima é tudo que posso fazer. O problema é quando falha, quero redirecionar a mensagem de erro ssh: connect to host c28-0112-05.ad.mtu.edu port 22: No route to host. Mas ainda recebo a mensagem de erro.

Responder1

Perto o suficiente:

timeout -5s "ssh $line true"

Aquilo é:

  1. Use aspas corretas. timeout `ssh …`não pode funcionar aqui, porque significa "executar 'ssh', capturar sua saída,entãodê a saída para 'timeout'."

  2. Execute o ssh no modo "batch", ou seja, dê um comando para executar. Sem ele, o ssh será executado em modo interativo e ficará suspenso para sempre, mesmo em conexões bem-sucedidas.

Você também pode tentar:

ssh -o ConnectTimeout=5s $line true

Responder2

ssh possui a -oopção, que permite fornecer opções adicionais. De uso particular aqui é a ConnectTimeoutopção, que leva um argumento especificado em segundos:

ssh -o ConnectTimeout=5 123.123.123.123

Além disso, ConnectionAttemptstambém pode ser útil para você.

informação relacionada