Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem bei ssh2_exec

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem bei ssh2_exec

    Hallo ich komme einfach nicht weiter



    original führe ich auf einem 2 Linux Rechner folgenden Befehl aus.

    per ssh als root mit sudo
    sudo /opt/bitdefender/bin/mongoshell -u bd -p '!Abc1234' --eval 'db.protectedEntities.find ({'deleted': {"$lt" : ISODate()}});' --quiet devdb

    nun versuche ich von einem 2 Rechner per PHP das zu realisieren
    und bekomme folgenden Fehler

    Connectet suche beginnt echo !Abc123 | sudo -S /opt/bitdefender/bin/mongoshell -u bd -p '!Abc1234' --eval 'db.protectedEntities.find ({'deleted' => {"$lt" => ISODate()}});' --quiet devdb &
    Warning: ssh2_exec(): ssh2_exec() expects arg 4 to be of type array in /var/www/html/admin/mongotools.php on line 163

    Warning: stream_set_blocking() expects parameter 1 to be resource, boolean given in /var/www/html/admin/mongotools.php on line 165

    Warning: ssh2_fetch_stream() expects parameter 1 to be resource, boolean given in /var/www/html/admin/mongotools.php on line 166

    Warning: stream_get_contents() expects parameter 1 to be resource, null given in /var/www/html/admin/mongotools.php on line 167

    ich habe aber kein Array

    PHP-Code:
    $connection_string ssh2_connect($db_host22);
    if (!
    $connection_string) die('Connection failed');
    if (@
    ssh2_auth_password($connection_string$user$bdadmin))
    {
        echo 
    "Connectet suche beginnt\n";

    }
    else
    {
        throw new 
    Exception("Authentication failed!");
    }

    echo
    "echo $bdadmin | sudo -S /opt/bitdefender/bin/mongoshell -u bd -p '$db_pass' --eval 'db.protectedEntities.find ({'deleted' => {",'"$lt"'," => ISODate()}});' --quiet devdb &";
    $stream ssh2_exec($connection_string,"echo $bdadmin | sudo -S /opt/bitdefender/bin/mongoshell -u bd -p '$db_pass' --eval 'db.protectedEntities.find ({'deleted' => {",'"$lt"'," => ISODate()}});' --quiet devdb &");
    echo 
    "<div>$stream</div>";
    stream_set_blocking($streamtrue);
    $stream_out ssh2_fetch_stream($streamSSH2_STREAM_STDIO);
    echo 
    stream_get_contents($stream_out); 
    würde mich freuen um Hilfe

    das Hier funktioniert komischer Weise
    PHP-Code:
    $stream ssh2_exec($connection_string,"echo $bdadmin | sudo -S find /var/log/ -type f -regex '.*\.[0-9]+\.gz$' ;");
    echo 
    "<div>$stream</div>";
    stream_set_blocking($streamtrue);
    $stream_out ssh2_fetch_stream($streamSSH2_STREAM_STDIO);
    echo 
    stream_get_contents($stream_out); 

  • #2
    Naja, Fehlermeldung lesen?

    Würdest du deinen Code übersichtlicher schreiben und nicht meterlange Zeilen, würde man den Fehler auch eher sehen.

    Ich übernehm die Formatierung mal für dich:

    PHP-Code:
    $stream ssh2_exec(
        
    $connection_string,
        
    "echo $bdadmin | sudo -S /opt/bitdefender/bin/mongoshell -u bd -p '$db_pass' --eval 'db.protectedEntities.find ({'deleted' => {",
        
    '"$lt"',
        
    " => ISODate()}});' --quiet devdb &"
    ); 
    " => ISODate()}});' --quiet devdb &" ist halt kein gültiger 4. Parameter.

    Kommentar


    • #3
      Warum führst du die Abfrage so umständlich aus und nicht einfach per PHP MongoDB Client? https://docs.mongodb.com/drivers/php/

      Kommentar


      • #4
        Zitat von hellbringer Beitrag anzeigen
        Naja, Fehlermeldung lesen?

        Würdest du deinen Code übersichtlicher schreiben und nicht meterlange Zeilen, würde man den Fehler auch eher sehen.

        Ich übernehm die Formatierung mal für dich:

        PHP-Code:
        $stream ssh2_exec(
        $connection_string,
        "echo $bdadmin | sudo -S /opt/bitdefender/bin/mongoshell -u bd -p '$db_pass' --eval 'db.protectedEntities.find ({'deleted' => {",
        '"$lt"',
        " => ISODate()}});' --quiet devdb &"
        ); 
        " => ISODate()}});' --quiet devdb &" ist halt kein gültiger 4. Parameter.
        wie müste den die Zeile richtig aussehen ??

        das gebe ich ja auf dem Rechner in der bash ein /opt/bitdefender/bin/mongoshell -u bd -p '!Abc1234' --eval 'db.protectedEntities.find ({'deleted' : {"$lt" : ISODate()}});' --quiet devdb &
        nachdem ich mich mit sudo su als admin identifiziert habe

        nach der Ausgabe gebe ich

        /opt/bitdefender/bin/mongoshell -u bd -p '$db_pass' --eval 'db.protectedEntities.deleteMany ({'deleted' : {'\$lt' : ISODate()}});' --quiet devdb &

        ein nur das möchte ich einfach von einem 2 Linux rechner aus machen können


        ad. Zeichen32 ich lasse mir von mehreren Collection die daten Zeigen und zum schluss nach einer abfrage werden sie über den Delete Befehl gelöscht.

        Kommentar


        • #5
          Hier ist die Dokumentation, programmieren musst du schon selber. https://docs.mongodb.com/php-library...lete-documents

          Kommentar


          • #6
            Muss man das wirklich über Mongo Connect machen ??

            Kommentar


            • #7
              Da kannst auch lernen, wie Strings in PHP funktionieren und welche Zeichen man gesondert behandeln muss:

              https://www.php.net/manual/de/language.types.string.php

              Kommentar


              • #8
                Danke habs hinbekommen auch so wie ich es wollte

                PHP-Code:
                $stream ssh2_exec(
                $connection_string,
                "echo $bdadmin | /opt/bitdefender/bin/mongoshell -u bd -p '$db_pass' --eval 'db.protectedEntities.find ({'deleted' : {".'"$lt"'." : ISODate()}});' --quiet devdb &");  
                echo 
                "<div>$stream</div>";
                stream_set_blocking($streamtrue);
                $stream_out ssh2_fetch_stream($streamSSH2_STREAM_STDIO);
                echo 
                stream_get_contents($stream_out); 
                kaum macht man es richtig klappt es auch mit dem Nachbarn

                Kommentar

                Lädt...
                X