Ich versuche zu verstehen, was grep -v grep unten tut:

ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l 

Oder gibt es eine bessere Möglichkeit, einen TCP-Verbindungstest zu finden?

Kommentare

  • Bitte konsultieren Sie das nächste Mal zuerst die Manpages. In diesem Fall man grep

Antwort

Alle Zeilen, die die Buchstabenfolge grep enthalten, werden von der vorherigen Pipe-Ausgabe ausgeschlossen.

Antwort

Wenn Sie überprüfen möchten, ob Sie innerhalb von 5 Sekunden eine SSH-Verbindung herstellen und einen Befehl ausführen können, gehen Sie einfach wie folgt vor:

if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then printf "%s\n" "$server is up" fi 

Ihr Befehl macht wenig Sinn. Da Sie keinen Befehl zum Ausführen auf dem Remote-Server angeben, wird ssh im rlogin -Modus, in dem ein Pseudo-Terminal angefordert und die Anmeldeshell des Remote-Benutzers gestartet wird (oder möglicherweise a ForcedCommand).

Anschließend wenden Sie mehrere Filter auf die Ausgabe an:

  • grep -v "Connection refused": Filtern Sie eine beliebige Zeile aus die Ausgabe , die Connection refused enthält. Dies ist wenig sinnvoll, da diese Fehlermeldung, wenn sie angezeigt wird, auf stderr geschrieben wird, nicht auf die Standardausgabe, die grep filtert, und auch, weil:
  • grep "Connected to": Wählen Sie nur die Zeilen aus, die Connected to enthalten. Dies würde auch die Zeilen ausschließen, die Connection refused enthalten, da es unwahrscheinlich ist, dass eine Zeile beide enthält.
  • grep -v grep Entfernen Sie auch die Zeilen, die grep enthalten (dies wären also Zeilen, die sowohl Connected to als auch grep und nicht Connection refused!)
  • wc -l: Zählen Sie die Anzahl der resultierenden Zeilen (also die Zeilen) in ssh „s stdout, die Connected to enthalten, außer solchen, die auch grep oder Connection refused). Beachten Sie, dass wc diese Nummer nur ausgibt, wenn die Verbindung geschlossen wird, wenn die Shell-Sitzung beendet wurde, z. B. wenn der Benutzer exit eingibt . Da der Benutzer jedoch keine Ausgabe sieht (da alles irgendwann an wc geht), hat der Benutzer wenig Ahnung, dass er , um diese Sitzung zu beenden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.