Perl-Skripte eines Servers per Webinterface eines anderen Servers starten

sMo

New Member
Hallo an alle User des SSF!

Ich hänge gerade an einer Problemlösung für folgendes Szenario:

Server1 läuft mit einem Debian etch, in einer Minimalkonfiguration mit lediglich FTP und SSH. Der Server wird für verschiedenste Aufgaben eingesetzt, sollte aber um Ressourcen zu sparen und die Sicherheit nicht unnötig zu gefährden nach Möglichkeit nicht verändert werden.

Server2 läuft mit Suse, Standard Web-Konfiguration. Apache, MySQL, PHP5, usw. Dieser Server kann zum ausführen der Aufgabe beliebig verändert werden.

Auf Server2 befindet sich ein Webinterface, welches nach erfolgreichem Login einige Aufgaben automatisiert (mit nur einem Klick) erledigen soll. Diese Aufgaben sollen von bereits vorhandenen Perl-Skripten auf Server1 ausgeführt werden. Die Perl-Skripte liegen auf Server1 und erwarten abgesehen vom Start-Befehl auch Attribute wie start, stop, restart, uvm. Diese Attribute müssen beim Ausführen der Skripte irgendwie mit übergeben werden.

Jetzt die Frage: Wie kann ich, nach Möglichkeit ohne die Konfiguration von Server1 zu verändern, die auf Server1 befindlichen Perl Dateien über das Webinterface von Server2 ausführen?

Die einzige, meines Erachtens nach aber nicht unbedingt optimale, Lösung die mir eingefallen ist, ist die folgende:

Nach dem anklicken der Aufgabe im Webinterface wird per PHP eine Datei in einem vorher festgelegten Verzeichnis von Server1 (per FTP) angelegt. Server1 lässt jede Minute per Crontab ein Script über das Verzeichnis laufen, welches nach genau der Datei ausschau hält, die durch das PHP-Skript erzeugt wird. Ist die Datei, mit passendem Inhalt und Parametern vorhanden, wird das verantwortliche Perl-Skript gestartet und die Aufgabe ist erfüllt.

Die Nachteile: Die Aufgaben werden nicht gerade Zeitkritisch erfüllt, lediglich jede Minute. Das "Überwachungs-Skript" müsste sehr komplex sein um jede Möglichkeit abdecken und alle verschiedenen Perl-Dateien ausführen zu können.

Fällt vielleicht jemandem etwas besseres ein um das Problem zu lösen?

Gruß sMo
 
Last edited by a moderator:
Hi,

Du könntest auf Server 2 einen SSH-Key ohne Passwort generieren und den Public Key auf Server 1 packen.
Mit folgendem Befehl, könntest Du dann bspw. ein Perlscript auf Server 1 ausführen.
Code:
server2:~$ ssh user@server1 "/usr/local/bin/perl_script.pl start"

Den Befehl könntest du dann über die PHP-Funktion system() oder shell_exec() aufrufen.

Nach Möglichkeit solltest du das nicht als user 'root' machen, da dies durchaus ein mögliches Sicherheitsrisiko darstellt. Sollte dir Server 2 mal gehackt werden, dann ist ohne Weiteres auch ein Zugriff auf Server 1 möglich.


-W
 
Zusätzlich sollte man in ~/.ssh/authorized_keys (auf Server1) angeben, dass nur genau dieses Script ausgeführt werden darf.
 
Wow, diese Lösung ist wesentlich besser als das was mir eingefallen ist! :D

Erstmal danke für den Tipp. Ich werde das beim nächsten mal so umsetzen und probieren.

Sollte ich mir bezüglich dieser Lösung ernsthafte Sorgen um die Sicherheit von Server1 machen? User ohne PW, da springen bei mir sämtliche Alarmglocken an...

Gruß sMo

EDIT:

Ich habe mich gerade mal etwas genauer über die SSH-Keys informiert. Scheint ja eine recht passable Lösung zu sein. Da sind meine Bedenken bzgl. User ohne Passwort wohl hinfällig. Selbst wenn Server2 mal geknackt werden sollte, könnte der User sowieso so gut wie nichts am Server1 anstellen.
 
Last edited by a moderator:
Back
Top