Cómo establecer una duración de tiempo de ssh y redirigir el mensaje de error

Cómo establecer una duración de tiempo de ssh y redirigir el mensaje de error

Tengo una lista de hosts y hay varios hosts. Quiero usar ssh para conectarme con ellos. Quiero ver si el host está disponible o no según el tiempo que tarda ssh. Si tarda más de 5 segundos (lo que significa que no está disponible). Luego deténgalo y envíe ssh al siguiente host. Una vez que un host esté disponible, envíe el nombre del host. Anteriormente usaba nmap, pero la seguridad de TI me dijo que no estaba permitido instalarlo en el escritorio del 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

El script anterior es todo lo que puedo hacer. El problema es que cuando falla, quiero redirigir el mensaje de error ssh: connect to host c28-0112-05.ad.mtu.edu port 22: No route to host. Pero sigo recibiendo el mensaje de error.

Respuesta1

Suficientemente cerca:

timeout -5s "ssh $line true"

Eso es:

  1. Utilice comillas correctas. timeout `ssh …`No es posible que funcione aquí, porque significa "ejecutar 'ssh', capturar su salida,entoncesdar la salida a 'tiempo de espera'."

  2. Ejecute ssh en modo "por lotes", es decir, déle un comando para que se ejecute. Sin él, ssh se ejecutará en modo interactivo y se bloqueará para siempre incluso en conexiones exitosas.

También puedes probar:

ssh -o ConnectTimeout=5s $line true

Respuesta2

ssh tiene el -omodificador, que le permite proporcionar opciones adicionales. De particular utilidad aquí es la ConnectTimeoutopción, que requiere un argumento especificado en segundos:

ssh -o ConnectTimeout=5 123.123.123.123

Además, ConnectionAttemptstambién te puede resultar útil.

información relacionada