1:

1:

Ich suche nach einer Möglichkeit, die Konfiguration von einem zentralen Computer auf mehrere Remotecomputer zu übertragen, ohne dass auf den Remotecomputern etwas installiert werden muss.

Das Ziel besteht darin, etwas zu tun, das Sie mit Tools wie erreichen würden cfengine, aber auf einer Reihe von Maschinen, auf denen keine Agenten eingerichtet sind. Dies könnte tatsächlich eine gute Technik für die Einrichtung cfagentauf einer Reihe vorhandener Remote-Maschinen sein.

Antwort1

Sie können ein Skript übergeben und es flüchtig ausführen lassen, indem Sie es weiterleiten und eine Shell ausführen.

z.B

echo "ls -l; echo 'Hello World'" | ssh me@myserver /bin/bash

Natürlich "ls -l; echo 'Hello World'"könnte der Teil durch ein Bash-Skript ersetzt werden, das in einer Datei auf dem lokalen Computer gespeichert ist.

z.B

cat script.sh | ssh me@myserver /bin/bash

Prost!

Antwort2

Hierfür gibt es mehrere Möglichkeiten.

1:

ssh user@remote_server 'bash -s' < localfile

2:

cat localfile  | ssh user@remote_server

3:

ssh user@remote_server "$(< localfile)"

Nummer 3 ist mein bevorzugter Weg, er ermöglicht interaktive Befehle, z. B.sudo -S service nginx restart

(#1 und #2 nutzen den Rest des Skripts als Eingabe für die Kennwortabfrage, wenn Sie verwenden sudo -S.)

Antwort3

Ich würde für diesen Zweck Python Fabric empfehlen:

#!/usr/bin/python
# ~/fabfile.py

from fabric_api import *

env.hosts = ['host1', 'host2']
def deploy_script():
    put('your_script.sh', 'your_script.sh', mode=0755)
    sudo('./your_script.sh')

# from shell
$ fab deploy_script

Sie sollten in der Lage sein, die oben genannten Informationen zu verwenden, um loszulegen. Konsultieren Sie Fabrics ausgezeichneteDokumentationum den Rest zu erledigen. Als Nachtrag: Es ist durchaus möglich, Ihr Skript vollständig in Fabric zu schreiben – kein Kopieren erforderlich. Es sollte jedoch beachtet werden, dass Sie zum Ändern des Skripts auf allen Maschinen nur die lokale Kopie bearbeiten und erneut bereitstellen müssen. Darüber hinaus können Sie mit etwas mehr als der grundlegenden Verwendung der API das Skript basierend auf dem Host ändern, auf dem es derzeit ausgeführt wird, und/oder auf anderen Variablen. Es ist eine Art pythonisches Expect.

Antwort4

Wie indiese AntwortSie können verwendenhierdoc:

ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH

Bei heredoc muss man vorsichtig sein, denn es sendet nur Text, wartet aber nicht wirklich auf die Antwort. Das heißt, es wartet nicht auf die Ausführung Ihrer Befehle.

verwandte Informationen