Wie kann ich Befehle im Batch-Modus über ssh ausführen? Das heißt, was entspricht dem ssh
Befehl sftp -b <filename> <hostname>
?
Ich habe eine Reihe von Befehlen, die ich über eine Reihe von Hosts ausführen möchte, über die eine Verbindung hergestellt wird ssh
. Über sftp
, ich speichere die Befehle in einer Datei filename
und verbinde mich mit dem Host und führe die Befehle mit dem zuvor erwähnten Befehl aus.
Ist so etwas möglich vorbei ssh
?
Antworten:
Korrigieren Sie mich, wenn ich falsch liege, aber Sie möchten anscheinend reguläre Shell-Befehle auf dem Remote-Server ausführen, auf dem das Skript lokal ist.
Ich mache dies mit einigen 'Remote Execution'-Apps in meiner Testumgebung, die Python anstelle der Shell verwenden :
ssh $userhost python < $pythonscriptfilename
.quelle
Das SSH-Äquivalent von
sftp -b <filename> <hostname>
wäre:ssh -o BatchMode=yes <hostname> sh -s < "<filename>"
quelle
Wie wäre es, es einfach zu halten und die "Batch" -Datei auf dem anderen Computer auszuführen?
Und die Batch-Datei wäre ein normales Shell-Skript, daher ist die Syntax bekannt.
quelle
man expect
? : \aber es ist nicht der perfekte Weg.
quelle
expect
entwickelt, um mit Programmen zu interagieren, die voraussichtlich auf einem Terminal ausgeführt werden. Dies hat nichts mit dem Problem zu tun, Befehle über ssh auszuführen.vielleicht
quelle
Sie können erzwungene ssh-Befehle verwenden.
Diese sind einem bestimmten Schlüssel zugeordnet. Wenn eine Authentifizierung mit diesem Schlüssel durchgeführt wird, wird dieser Befehl ausgeführt und die Verbindung wird beendet. Ein Vorteil dieses Ansatzes ist die erhöhte Sicherheit, da in diesem Fall der Schlüssel nicht zum Aufrufen einer Anmeldeshell verwendet werden kann.
quelle
Eine weitere Option für ein Skript von Arcege wäre eine Bash-Funktion:
Ich verwende die
-T
Option von ssh nicht , da sie nicht in allen Fällen funktioniert.Dieses Skript verwendet die Parametererweiterung für das Positionsparameter-Array
$@
:"${@:(-1)}"
wird bis zum letzten Parameter erweitert (buchstäblich erst ab dem Ende)"${#@}"
erweitert sich auf die Anzahl der Positionsparameter"${@:1:${#@}-1}"
Erweitert sich zu einer Liste aller Parameter vom ersten bis zum vorletzten (buchstäblich Anzahl der Parameter abzüglich eines).quelle