Seite 2 von 2 ErsteErste 12
Ergebnis 21 bis 30 von 30

Thema: Passwörter in einer SQL Datenbank speichern

  1. #21
    Zitat Zitat von Whiz-zarD Beitrag anzeigen
    Allerding möchte ich gern per php den Tunnel starten, sodass der Tunnel nur dann aufgebaut wird, wenn er gebraucht wird. Also hab ich zwei Zeilen geschrieben, die lauten
    Code (php):
     
    $str = shell_exec('ssh -N -l <user> -L3306:127.0.0.1:3306 <Server-IP> sleep 20');
    $db = mysql_connect('127.0.0.1', '<user>', '<passwort>' );


    Allerdings scheint php den Shell Befehl nicht auszuführen.
    shell_exec ist nicht deaktiviert, da andere Befehle, wie z.B. ls funktionieren.

    Weiß vielleicht einer, woran das liegen kann und ich dass verändern verändern kann?
    Sicher, dass das mysql_connect() überhaupt jemals ausgeführt wird?
    shell_exec() wartet darauf, dass das Programm beendet wird, bevor es das PHP-Script weiterlaufen lässt. Der ssh-Befehl, den du verwendest (und der einige Ungereimtheiten enthält, dazu gleich) beendet aber nie.

    Mein Vorschlag:
    Code (PHP):
    $str = shell_exec('ssh -f -N -l <user> -L3306:localhost:3306 <Server-IP>');

    Unterschiede: Durch -f wird SSH angewiesen, in den Hintergrund zu forken, sodass shell_exec() das Script weiterlaufen lässt. Durch -N weist du SSH an, keinen Befehl auf dem Server auszuführen, weshalb du das sleep 20 sparen kannst (wird eh nicht ausgeführt).

    Da du so keine Kontrolle mehr über das laufende ssh hast, solltest du entweder vorher checken, ob der Tunnel schon aufgebaut wurde, oder etwas anderes als shell_exec benutzen und ssh am Ende des Scripts wieder killen (je nachdem, ob das Script mehrfach ausgeführt wird oder als Daemon die ganze Zeit läuft). Schau dir dazu z.B. mal die proc_*()-Funktionen an.

  2. #22
    shell-exec() ist blockierend. Sprich: PHP wartet ab, bis der Befehl vollständig durchgelaufen ist, bevor es den nächsten Befehl verarbeitet. Falls dein Skript auf einem *nix-Rechner läuft (also auf so ziemlich allem außer Windows), solltest du dir die POSIX-Threadmanagementbefehle ansehen. Allerdings müssen die PCNTL-Funktionen einkompiliert sein, was sie nicht immer sind.

    Alternativ kannst du dir vielleicht mit proc_open() was basteln, allerdings hab' ich auf die Schnelle nichts sinnvolles hingekriegt.

  3. #23
    Zitat Zitat von Jesus_666 Beitrag anzeigen
    shell-exec() ist blockierend. Sprich: PHP wartet ab, bis der Befehl vollständig durchgelaufen ist, bevor es den nächsten Befehl verarbeitet.
    dann würde ich aber irgendwann eine Meldung bekommen, dass die zeit vom Script abgelaufen wäre aber es sieht so aus, als würde er den Befehl komplett ignorieren, da ich die Fehlermeldung bekomme, dass er sich nicht zum MySQL Server verbinden kann. Also springt er zur nächsten Zeile des Scriptes.
    $str ist auch leer, also NULL. Bei einer Fehlermeldung müsste zumindest $str FALSE sein.

  4. #24
    Rein gefühlsmäßig würde ich sagen, dass die Verbindung aufgebaut und wieder geschlossen wird. Dementsprechend kriegst du natürlich auch keinen Fehler.

  5. #25
    Ich hab nun das Ganze mal über ein Bash-Script versucht.
    Allerdings auch vergeblich. Wenn ich im Terminal das Script ausführe, funktioniert es.
    Aber nicht, wenn ich es per php aufrufe.

    Kann es vielleicht irgendwas mit den Rechten zu tun haben?

  6. #26
    Ich wiederhole: ich nehme an, dass PHP das Skript sofort wieder abwürgt, bevor der nächste Befehl ausgeführt werden kann. Probier mal was anderes als shell_exec

  7. #27
    Zitat Zitat von Whiz-zarD Beitrag anzeigen
    shell_exec ist nicht deaktiviert, da andere Befehle, wie z.B. ls funktionieren.
    Das habe ich schon versucht.
    Andere Befehle funktionieren ja.

    Das Script wird ja nicht abgewürgt. Wenn er es abwürgen würde, würde er nicht versuchen, eine Verbindung zum MySQL Server aufzubauen, was aber nicht klappt, da Lokal kein MySQL Server läuft und deshalb eine Fehlermeldung ausspuckt.

    Wie ich schon sagte, es sieht so aus, als würde er den Befehl in Shell_exec() ignorieren.

  8. #28
    *seufz*

    Ich meinte, PHP würgt das ab, was du per shell_exec aufrufst. Das heißt, dein SSH Tunnel wird aufgebaut und direkt wieder geschlossen, danach versucht PHP, eine Datenbankverbindung aufzubauen, was zu dem Zeitpunkt gar nicht mehr geht.

  9. #29
    und wie kann php ein Bash Script abwürgen, welches ein Tunnel im Hintergrund aufbaut?
    Schonmal wie kann Shell_exec() überhaupt ein Befehl abwürgen?

  10. #30
    Zitat Zitat von DFYX Beitrag anzeigen
    *seufz*

    Ich meinte, PHP würgt das ab, was du per shell_exec aufrufst. Das heißt, dein SSH Tunnel wird aufgebaut und direkt wieder geschlossen, danach versucht PHP, eine Datenbankverbindung aufzubauen, was zu dem Zeitpunkt gar nicht mehr geht.
    Wir haben es ja auch schon mit proc_open() versucht, ebenfalls kein Erfolg.
    Falls jemand mit dem Exit Code 255 was anfangen kann, den wirft proc_status() hinterher aus...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •