Zunächst wollen wir die Änderungen von einem System auf ein anderes System übertragen. Dazu haben wir ein Shell-Skript in synchfolders.sh
der Datei:
rsync -av --delete -e 'sshpass -p Wordpress@123 ssh -p 22' [email protected]:/var/www/html/prosync/wp-content/plugins/ /var/www/html/devsync/wp-content/plugins >> /var/www/html/devsync/wp-content/mysynclog.txt
und wir möchten dieses Shell-Skript in einer PHP-Datei ausführen, shell_exec()
und während diese PHP-Datei von einem anderen Browser als dem rsync-Befehl ausgeführt wird, werden alle ausgeführt, aber der rsync
wird nicht ausgeführt. Wir haben das Material in SO gesucht und den Link gefundenhttps://stackoverflow.com/questions/30772816/php-exec-rsync-ssh-to-remote-server-not-working/30773063#30773063, wie hier gesagt, haben wir versucht, die PHP-Datei über die Befehlszeile auszuführen, und es funktioniert perfekt, aber nicht über den Browser. Warum? Bitte lassen Sie uns wissen, wo wir einen Fehler gemacht haben. Vielen Dank im Voraus
Antwort1
Generell gilt: In Skripten, die nicht von Ihrer üblichen interaktiven Shell ausgeführt werden, müssen Sie sicherstellen, dass Sie entwederabsolute Pfade verwenden(also /usr/bin/rsync
statt rsync
) oderRichten Sie die richtige Umgebung einmit einem guten Wert für $PATH
Als zusätzliche Verbesserung: Anstelle einer passwortbasierten Authentifizierung sollten Sie für die Verwendung in Skripten wirklich eine schlüsselbasierte SSH-Authentifizierung einrichten.
Wenn Sie keine Passwörter mehr, sondern Schlüssel verwenden, können Sie den SSH-Server sperren und sichern (die Deaktivierung der Passwortauthentifizierung stoppt Brute-Force-Angriffe) und, was noch wichtiger ist, Sie können Einschränkungen hinzufügen, was zulässig ist, wenn ein bestimmter Schlüssel zur Authentifizierung verwendet wird, was mit einem Passwort nicht möglich ist.
Sie können den in Ihrem Skript verwendeten Schlüssel einschränken, sodass er nur für rsync von einem bestimmten Host aus verwendet werden kann.
Selbst wenn Ihr Skript kompromittiert wird, wird nicht Ihr Root-Passwort gestohlen (das Ihnen die volle Kontrolle über Ihren Server gewährt), sondern nur ein privater Schlüssel, der eingeschränkten Zugriff gewährt, wenn er überhaupt verwendet werden kann.