Wie kann ich eine dauerhafte SSH-Verbindung herstellen, um Befehle über einen bestimmten Zeitraum zu „streamen“?

Wie kann ich eine dauerhafte SSH-Verbindung herstellen, um Befehle über einen bestimmten Zeitraum zu „streamen“?

Angenommen, auf einem meiner PCs läuft eine Anwendung, die Befehle über SSH an einen anderen PC im Netzwerk sendet (auf beiden Rechnern läuft Linux).

Beispielsweise möchte ich jedes Mal, wenn bei #1 etwas passiert, eine Aufgabe bei #2 ausführen. In diesem Setup muss ich bei jedem einzelnen Befehl eine SSH-Verbindung herstellen.

Gibt es eine einfache Möglichkeit, dies mit grundlegenden Unix-Tools zu tun, ohne eine benutzerdefinierte Client/Server-Anwendung zu programmieren? Im Grunde möchte ich nur eine Verbindung über SSH herstellen und dann einen Befehl nach dem anderen senden.

Antwort1

Ich bin nicht sicher, ob es in der Produktion verwendet werden kann, aber Sie können so etwas tun:

Datei erstellen auf #1

1>touch /tmp/commands

Führen Sie dann den folgenden Befehl aus:

1>tail -f /tmp/commands | ssh [email protected]

Dadurch wird die Datei /tmp/commands geöffnet und ihr Inhalt an den Server xxxx (#2) gesendet und dort Zeile für Zeile ausgeführt.

Jetzt, jedes Mal wenn bei #1 etwas passiert, tun Sie Folgendes:

1>echo "ls -l" >> /tmp/commands

oder

1>echo "reboot" >> /tmp/commands

alles, was Sie zur Datei /tmp/commands hinzufügen, wird an #2 gesendet und ausgeführt. Stellen Sie einfach sicher, dass Sie nichts Interaktives ausführen, oder behandeln Sie es irgendwie.

Antwort2

Automatische Persistenz mit OpenSSH

ControlMasterSie können auch die Funktion von OpenSSH nutzen , das für die erste Verbindung einen Unix-Domain-Socket öffnet und diese Verbindung bei allen nachfolgenden Aufrufen wiederverwendet.

Um die Funktion zu aktivieren, können Sie entweder -Mden Befehlszeilenschalter verwenden oder die ControlMasterOption in Ihrem aktivieren ~/.ssh/ssh_config, zum Beispiel:

ControlMaster auto

Zusätzlich sollten Sie ControlPathdie folgenden Zeilen in Ihrem festlegen ~/.ssh/ssh_config:

Host *
   ControlPath ~/.ssh/master-%r@%h:%p

Um eine dauerhafte Verbindung zu einem Host aufrechtzuerhalten, z. B. wenn Sie ein Skript ausführen möchten, das viele SSH-Verbindungen zum Host herstellen muss, von denen keine über die gesamte Lebensdauer des Skripts bestehen bleibt, können Sie vorab eine stille Verbindung starten, indem Sie Folgendes verwenden:

ssh -MNf remotehost

Tschüß, nesono

Antwort3

Im /etc/ssh/ssh_configAdd

# Send keep alive signal to remote sshd
ServerAliveInterval 60

Antwort4

ja, mit einer Pipe ist das möglich:

echo 'echo "hi"' | ssh -i my_private_key tester@host2

Dadurch wird der Befehl echo "hi" auf Host2 ausgeführt.

du musst nur ein Programm schreiben, das die Befehle ausgibt (vergesse das ; nicht) und diese Ausgabe dann an ssh weiterleitet

verwandte Informationen