Festlegen einer Zeitdauer von ssh und Umleiten der Fehlermeldung

598
Ben

Ich habe eine Hostliste und es gibt mehrere Hosts. Ich möchte ssh verwenden, um mich mit ihnen zu verbinden. Ich möchte sehen, ob der Host verfügbar ist oder nicht, wie lange ssh dauert. Wenn es länger als 5 Sekunden dauert (was bedeutet, dass es nicht verfügbar ist). Dann hör auf und ssh zum nächsten Host. Wenn ein Host verfügbar ist, geben Sie den Hostnamen aus. Ich benutze zuvor nmap, aber die IT-Sicherheit sagte, es sei nicht erlaubt, es auf dem Desktop auf dem Campus zu installieren.

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 

Das obige Skript ist alles, was ich tun kann. Das Problem ist, wenn es fehlgeschlagen ist, möchte ich die Fehlermeldung umleiten ssh: connect to host c28-0112-05.ad.mtu.edu port 22: No route to host. Ich bekomme aber immer noch die Fehlermeldung.

2

2 Antworten auf die Frage

0
grawity

Nahe genug:

timeout -5s "ssh $line true" 

Das ist:

  1. Verwenden Sie korrekte Anführungszeichen. timeout `ssh …`kann hier unmöglich funktionieren, da dies "run 'ssh' bedeutet, die Ausgabe aufzeichnen und dann die Ausgabe auf 'timeout' setzen."

  2. Führen Sie ssh im "batch" -Modus aus, dh geben Sie einen Befehl zum Ausführen. Andernfalls läuft ssh im interaktiven Modus und bleibt auch bei erfolgreichen Verbindungen für immer hängen.

Sie könnten auch versuchen:

ssh -o ConnectTimeout=5s $line true 
Vielen Dank. Ich habe versucht `ssh -o ConnectionTimeout = 5s` c15-0330-01.ad.mtu.edu auf true zu setzen. Es funktioniert und nichts wird zurückgegeben. Aber wie kann ich den Namen des Hosts zurückgeben (ich bin neu in Linux)? Und wenn ich eine Verbindung zu einem Host herstelle (ich weiß, dass es offline ist), wird `ssh: connect to host c15-0331-01.ad.mtu.edu Port 22: Keine Route zum Host` zurückgegeben. Ich möchte folgendes machen: Wenn ssh erfolgreich ist, dann `echo $ line> host_available '. Ben vor 9 Jahren 0
0
Jarmund

ssh hat den -oSchalter, mit dem Sie zusätzliche Optionen angeben können. Von besonderem Nutzen ist hier die ConnectTimeoutOption, die ein in Sekunden angegebenes Argument benötigt:

ssh -o ConnectTimeout=5 123.123.123.123

Darüber hinaus kann ConnectionAttemptses auch für Sie nützlich sein.

Vielen Dank. Ich habe versucht `ssh -o ConnectionTimeout = 5s` c15-0330-01.ad.mtu.edu auf true zu setzen. Es funktioniert und nichts wird zurückgegeben. Aber wie kann ich den Namen des Hosts zurückgeben (ich bin neu in Linux)? Und wenn ich eine Verbindung zu einem Host herstelle (ich weiß, dass es offline ist), wird `ssh: connect to host c15-0331-01.ad.mtu.edu Port 22: Keine Route zum Host` zurückgegeben. Ich möchte folgendes machen: Wenn ssh erfolgreich ist, dann `echo $ line> host_available '. Ben vor 9 Jahren 0