Manchmal starte ich ein Gerät neu und muss ssh
zurück, wenn es bereit ist.
Ich möchte den Befehl ssh alle 5 Sekunden ausführen, bis der Befehl erfolgreich ist.
Mein erster Versuch:
watch -n5 ssh [email protected] && exit 1
Wie kann ich das machen?
Antworten:
Eine andere Option wäre zu verwenden
until
.Wenn Sie dies für eine Reihe von Hosts wiederholt ausführen, fügen Sie es in eine Funktion in Ihrer Datenbank ein
~/.bashrc
.quelle
$
anstelle der Eingabeaufforderung :-)ssh
das Skript nach einer erfolgreichen Verbindung mit einem Status ungleich Null beendet werden kann, wenn etwas außerhalb der Verbindung die Sitzung beendet. In diesem Fall versucht das Skript, die Verbindung wiederherzustellen. Dies kann eine wünschenswerte Nebenwirkung sein oder auch nicht.Das
!!
, um den letzten Befehl zu wiederholen.quelle
OpenSSH hat eine
ConnectionAttempts
Einstellung, die fast das macht, was Sie wollen. Der Standardwert ist 1, Sie können ihn jedoch inssh_config
oder über die Befehlszeile ändern :Leider können Sie das Versuchsintervall, das auf 1 Sekunde festgelegt ist, nicht anpassen, aber Sie können das Zeitlimit für Verbindungsversuche
ConnectTimeout
(in Sekunden) auf dieselbe Weise anpassen .quelle
quelle
while ! nc -w5 -z host.example.com 22; do [...]
.autossh
hält ssh-Sessions am Leben Mit den richtigen Parametern können Sie es auch starten, wenn es derzeit nicht möglich ist, eine Verbindung herzustellen, und es wird versucht, bis es erfolgreich ist. Dies funktioniert gut, aber wenn Sie wollen , dass die wieder an der Arbeit gut mit interaktiven Sitzungen connect Teil Sie es mit kombinieren werden müssenscreen
oder gleichwertig.Ich empfehle dies:
Weitere Informationen finden Sie auf der Manpage. Mit den oben genannten Parametern
autossh
wird versucht, ssh alleAUTOSSH_POLL
Sekunden zu starten.AUTOSSH_GATETIME=0
Wenn der erste Versuch fehlschlägt (also definitiv, was Sie wollen), wird-M 0
die Verbindungsprüfung durch Autossh deaktiviert. Alle späteren Optionen werden an ssh übergeben. Die beiden-o
Optionen bewirken, dass ssh beendet wird, wenn die Verbindungen länger als 5 Sekunden unterbrochen werden.quelle
Da ich die Gefahr habe, nur Code auf eine Antwort zu werfen, funktioniert dieses Skript täglich für mich. Ich nenne es
ressh
und es kann so einfachressh {hostname}
oder mit Sorgfalt verwendet werden,ressh -S {session_name} {hostname}
quelle