Führen Sie das Remote-Skript mit dem lokalen Parameterwert aus


8

Wie kann ich diese Aufgabe automatisieren?

1) Sie sind bei A. 2) Sie ssh in B. 3) Sie führen ein Skript bei B aus, das einen bei A bekannten Parameter benötigt.

Zuerst dachte ich, ich könnte den Wert vielleicht senden, als ich die Verbindung mit ssh öffnete. Dann, wahrscheinlich einfacher, zwischen 1) und 2) scp das gesamte Skript an die gleiche Stelle bei B (anstelle des alten). Aber nach wie vor, wie kann ich ausführen das Skript an B? (Das heißt, wie man diesen letzten Schritt automatisiert. Natürlich könnte ich ihn nach ssh manuell ausführen.)

Ein anderer Gedanke, vielleicht ssh ganz verwerfen - ich habe eine Webseite bei B, könnte das Skript also irgendwie über eine "unter der Haube" -Webschnittstelle aufgerufen werden?

Oder würden Sie es ganz anders machen?


Antworten:


11
myparameter=foobar
ssh user@server "myscript $myparameter"

Dies wird myscript foobarauf dem Server ausgeführt.


So einfach ist das! Funktioniert super. (Ich musste ein "./" vor den Skriptnamen setzen, weil es sonst gesucht hat ~/.elm/aliases.)
Emanuel Berg

6
Als kleine Warnung ist hier die Verwendung von doppelten Anführungszeichen ( ") im Gegensatz zu einfachen ( ') wichtig. Die Verwendung von double bedeutet, dass die Shell auf Ihrem lokalen Computer die Variable erweitert und dann den sshBefehl ausführt . Wenn einzelne verwendet würden, würde die lokale Shell den Befehl nicht berühren, der wörtlich gesendet wird, aber in der Remote-Shell noch erweitert wird.
Tilo Wiklund

3
Beachten Sie, dass $myparameterLeerzeichen auf der Serverseite aufgeteilt werden , wenn sie Leerzeichen enthalten. Bash's printfhat ein %qFormat, das Sie verwenden können. Ich habe einen Beispielcode, der hier jedoch nicht passt. Ich werde eine neue Antwort darauf erstellen.
Janmoesen

7

(Dies ist eine Fortsetzung meines Kommentars zur akzeptierten Antwort .)

Beachten Sie, dass $myparameterLeerzeichen auf der Serverseite aufgeteilt werden , wenn sie Leerzeichen enthalten. Bashs printf hat ein %qFormat, das Sie verwenden können. Beispiel:

$ myparameter='hello; rm somefile'
$ ssh user@server "echo $myparameter"
hello
rm: cannot remove `somefile': No such file or directory

$ ssh user@server "echo $(printf '%q' "$myparameter")"
hello; rm somefile

1

Wenn es sicher ist , anzunehmen , dass $myparameterwird nicht einfache Anführungszeichen enthalten (ansonsten siehe hier oder benutzen printf '%q' ...Lösung von janmoesen), können Sie nur um einfache Anführungszeichen setzen $myparameterdie Split-on-Raumproblem auf der Serverseite zu vermeiden.

myparameter="foo \" bar"
#myparameter="foo \" ' bar"

ssh localhost "set -xv; printf '%s\n' myscript '${myparameter}'"
ssh localhost "set -xv; echo $(set -xv; printf '%q' "$myparameter")"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.