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

2

Eu tenho uma lista de host e existem vários hosts. Eu quero usar o ssh para se conectar a eles. Eu quero ver se o host está disponível ou não pelo tempo de duração do ssh. Se demorar mais de 5s (o que significa que não está disponível). Então pare e ssh para o próximo host. Quando um host estiver disponível, envie o nome do host. Anteriormente, eu uso o nmap, mas a segurança de TI disse que não é permitido instalá-lo na área de trabalho no 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 ele está falhando, eu quero redirecionar a mensagem de erro %código%. Mas ainda recebo a mensagem de erro.

    
por Ben 24.05.2015 / 21:47

2 respostas

0

perto o suficiente:

timeout -5s "ssh $line true"

Isto é:

  1. Use aspas corretas. timeout 'ssh …' não pode funcionar aqui, porque significa "run 'ssh', capture sua saída, então dê a saída para 'timeout'."

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

Você também pode tentar:

ssh -o ConnectTimeout=5s $line true
    
por 24.05.2015 / 21:55
0

ssh tem a opção -o , que permite fornecer opções adicionais. De uso particular aqui é a opção ConnectTimeout , 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ê.

    
por 24.05.2015 / 21:55