
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 é:
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'."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 -o
opção, que permite fornecer opções adicionais. De uso particular aqui é a ConnectTimeout
opção, que leva um argumento especificado em segundos:
ssh -o ConnectTimeout=5 123.123.123.123
Além disso, ConnectionAttempts
também pode ser útil para você.