
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:
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'."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 -o
modificador, que le permite proporcionar opciones adicionales. De particular utilidad aquí es la ConnectTimeout
opción, que requiere un argumento especificado en segundos:
ssh -o ConnectTimeout=5 123.123.123.123
Además, ConnectionAttempts
también te puede resultar útil.