Ich habe ein Skript, das eine virtuelle Maschine erstellt und mir eine IP-Adresse zurückgibt. Dann möchte ich so etwas machen:
waitforssh 192.168.2.38 && ssh 192.168.2.38
Und es wird warten, bis die Maschine hochgefahren ist und ssh reagiert, dann ssh hinein.
waitforssh ist der Befehl, den ich finden muss.
Würden nmap, netcat, fping oder ping den Job machen? Ich habe Netcat ausprobiert, aber es gibt in nur wenigen Sekunden auf, wenn der Host nicht erreichbar ist.
Es muss die Tatsache berücksichtigen, dass der Computer selbst startet und es einige Zeit dauern kann, bis auf Netzwerkpakete reagiert wird.
Etwas Einfaches wie dieses erledigt den Job, indem es 5 Sekunden zwischen den Versuchen wartet und STDERR verwirft
quelle
-o ConnectTimeout=2
ist eine etwas hackige Methode, um nicht auf Netzwerkpakete zu reagieren und zu berichten,ssh: connect to host 10.10.0.3 port 22: Operation timed out
bis sie reagiert .Wenn der Host dann auf Netzwerkpakete reagiert, erfolgt die 1-Sekunden-Pause zwischendurch,
ssh: connect to host 10.10.0.3 port 22: Connection refused
während wir darauf warten, dass ssh angezeigt wird.quelle
Dem Befehl ssh kann ein Befehl zugewiesen werden, der als letzter Parameter auf dem Remotecomputer ausgeführt wird. Rufen Sie also
ssh $MACHINE echo
in einer Schleife auf. Bei Erfolg wird 0 in $ zurückgegeben, bei Fehler 255. Sie müssen natürlich die paswordless-Authentifizierung mit Zertifikaten verwenden.quelle
Nun, ich bin mir nicht sicher, was du damit meinst, wach zu sein , aber was ist mit:
Der erste Befehl
ping | ... | head -1
wartet darauf, dass der Server eine einzelne Ping-Antwort sendet, und ist vorhanden. Dann kommt ssh ins Spiel. Beachten Sie, dassgrep
die Ausgabe gepuffert werden kann--line-buffered
.Sie können diesen Befehl mit der Bash-Funktion umschließen, um ihn genau so zu verwenden, wie Sie es beschrieben haben.
quelle
Dies ist ein 'ping_ssh'-Skript, das ich verwende. Es behandelt Timeout-Fälle, ist schnell erfolgreich und fordert nicht zur Eingabe von Kennwörtern auf oder lässt sich nicht täuschen, wenn der Port geöffnet ist, aber nicht wie bei 'nc'-basierten Lösungen reagiert. Dies kombiniert mehrere Antworten, die auf verschiedenen Stackoverflow-bezogenen Sites gefunden wurden.
quelle