SSH Verbindung Remote neustart

  • Hallo, ich bins nochmal :) .

    Mir wurde hier gestern schon weitergeholfen aber bin leider immer noch nicht am Ziel darum möchte ich jetzt mein Vorhaben genauer erklären.

    Ich möchte mithilfe eines Webservers Apache 2 und PHP einen PI Remote neustarten. Mit hilfe eines Links. Das Skript kann ich mit PHP Starten und die SSH Verbindungen scheint zu funktionieren aber für den Neustart werden erhöhte Rechte benötigt. SUDO. Aber einfach SUDO ins Skript zu schreiben lässt er nicht zu. Im Ordner und in der Datei habe ich WWW-DATA hinzugefügt. mit chown -R usw


    pi:www-data


    Es ist echt schwierig. Hat das von euch schon jemals jemand probiert?


    LG

  • Früher hiess es, setz das setuid Bit, da konnte jeder das File als User root ausführen.

    Das geht jetzt aus gutem Grunde bei Scripten nicht mehr.


    Jetzt kann ein User (z.B. root) einen anderen User (z.B. www-data ) mit einem ACL berechtigen das Script in seinem Namen (root) auszuführen.

    < man setfacl > samt SEE ALSO.



    Servus !

    RTFM = Read The Factory Manual, oder so

  • Aber einfach SUDO ins Skript zu schreiben lässt er nicht zu.

    Dazu muss der Benutzer www-data auch das Recht haben sudo zu nutzen. Das kannst Du ihm einräumen, in dem du z.B.

    folgende Zeile per EDITOR=nano sudo visudo  hinzufügst.

    Code
    www-data      ALL = NOPASSWD: /usr/bin/systemctl reboot

    Und vorsichtshalber ein anschließendes sudo systemctl restart apache2 ausführst.

    Im PHP-Script löst du den Reboot dann per "/usr/bin/sudo /usr/bin/systemctl reboot" aus

    Menschen die keine Ironie verstehen finde ich super!

  • Ich habe das jetzt so gemacht aber es geht leider nicht.

    EDITOR=nano sudo visudo


    Die Zeile unten hinzugefügt

    www-data ALL = NOPASSWD: /usr/bin/systemctl reboot


    Der Webserver öffnet diese Datei.


    <?php

    echo shell_exec ("/var/www/html/pw2/boot.sh 2>&1");

    ?>


    Und boot.sh sieht so aus.


    sshpass -p raspberry ssh pi@192.168.10.144 'echo raspberry | /usr/bin/sudo /usr/bin/systemctl reboot'


    aber es passiert nichts.


    Wenn ich boot.sh im terminal ausführe gehts.


    und die Rechte


    -rwxrwxrwx 1 pi www-data 101 Jun 20 13:52 boot.sh




    Hmm....

  • Obiges Vorgehen setzte voraus, dass der Webserver auf dem neuzustartenden Rechner läuft (RPi). Da hatte ich dein Ansinnen wohl falsch gelesen.

    Für dein Vorhaben böte sich ein extra ssh-key ohne Passphrase, mit dem reboot-cmd als forced-command an. Mit dem loggst du dich als root ein und das forced-command sorgt dabei für den Neustart.

    Aufruf dann in etwa “ssh -i /pfad/zum/key root@192.168.10.144“

    Menschen die keine Ironie verstehen finde ich super!

    • Official Post

    gar nicht sicher

    Dann würde ich das einfach per netcat statt mit SSH machen.


    Auf dem Remote-RPi ein kleines Skript, in etwa soetwas

    Bash: reboot.sh
    #!/bin/bash
    read -r
    
    if [ $REPLY == "meine_Botschaft1234586789" ]
    then
        sudo reboot
    else
        exit
    fi

    per Systemd Service Unit (mit der Option Restart=always) und das Skript mit der Zeile nc -l -p 1234 | /Pfad/zu/reboot.sh starten lassen.



    Und im PHP-Skript

    PHP
    shell_exec('echo "meine_Botschaft1234586789" | nc IP_des_RPi 1234');

    verwenden.