Mein Heimcomputer, ein Mac mit OS X 10.8.5, akzeptiert normalerweise SSH-Verbindungen über das Internet (ich habe die Ports weitergeleitet), ist aber gerade im Ruhezustand. Er kann aus verschiedenen Gründen manchmal aufwachen, wenn ich nicht zu Hause bin. Ich möchte ihm einige SSH-Befehle senden, kann aber nicht sitzen bleiben und es weiter versuchen, bis er aufwacht.
Gibt es eine einfache Möglichkeit, eine SSH-Verbindung, Kennwortauthentifizierung und Befehlseingabe zu verzögern, bis der Hostcomputer antwortet, und zwar ohne AppleScript? Ich verwende einen Mac unterwegs, würde aber gerne wissen, wie dies auf einem beliebigen Unix-basierten Betriebssystem funktioniert. Normalerweise wird nach etwa einer Minute des Verbindungsversuchs eine Zeitüberschreitung festgestellt.
Ich weiß, dass man in den meisten Terminalemulatoren Befehle eingeben kann, während blockierende Prozesse laufen, und diese werden ausgeführt, sobald diese Prozesse beendet sind. Ein Beispiel ist das Eingeben git push foo
direkt danach, git commit -a -m "foo"
während git commit -a -m "foo"
noch läuft; Git wird pushen, sobald es fertig ist. Ich dachte, es könnte einen Trick geben, um so etwas mit SSH über einen Terminalemulator zu machen.
Antwort1
Sie können mit Ping prüfen, ob Ihr Rechner hochfährt, und dann einen oder mehrere SSH-Befehle ausführen. Beachten Sie, dass Sie auf Ihrem Host eine zertifikatsbasierte Authentifizierung einrichten müssen. Hier ist ein kleines Skript, das auf GNU/Linux BASH basiert, aber ich denke, Sie können es in jedes beliebige Mac OS X-Betriebssystem konvertieren.
#/bin/bash
hostup=0
while [ $hostup -ne 1 ]; do
ping -c 4 <hostname or IP>
if [ $? -eq 0 ]; then
ssh username@hostname <command to execute>
hostup=1;
done
Nur ein Befehl pro SSH-Zeile und wenn Sie Parameter verwenden möchten, müssen Sie Ihren Befehl in Anführungszeichen setzen. Wenn Sie immer wieder dieselben Befehle ausführen möchten, ist möglicherweise ein Skript auf Ihrem Heimcomputer angebracht.