Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Ausführung eines Bash-Skripts mit HTTP/UDP/SHELL-Funktion

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

    [Codebeispiel] Problem mit Ausführung eines Bash-Skripts mit HTTP/UDP/SHELL-Funktion

    Hallo Edomi-Forum,
    ich möchte mich in die Reihe der Danksagungen mit hohem Respekt vor dieser Entwicklungsleistung von gaert als Schöpfer von Edomi einreihen, aber auch den vielen Forennutzern und Administratoren mit ihren interessante Beiträgen, Tipps und Lösungskonzepten danken.

    Ich hänge aktuell an der Ausführung eines Skripts, welches ich mit der HTTP/UDP/SHELL-Funktion gerne ausführen lassen würde. Das ganze läuft auf einem Raspberry 4b mit Ubuntu 18.04 und Edomi 2.02. Das Skript ist auf Shell-Ebene (Kommandozeile) mit dem User „ubuntu“ und den Rechten -rwxrwxr-x im z. B. /home/ubuntu oder /tmp Verzeichnis ausführbar und tut was es soll.
    In Edomi ist der HTTP/UDP/SHELL-Befehl in einer Ausgangsbox, die bei entsprechendem Trigger die hinterlegten Befehle ausführt. Die neben der HTTP/UDP/SHELL-Funktion hinterlegten Befehle werden ausgeführt, so dass der Trigger und die Ausgangsbox für die Funktion auch funktionieren.

    Sehr freuen würde ich mich über einen Hinweis, wie die Eingabe in der HTTP/UDP/SHELL-Funktion Typ SHELL inkl Pfad aussehen muss, wenn ein Skript „pi-shutdown.sh“ im z. B. Verzeichnis /tmp ausgeführt werden soll. Nur der Skriptname mit Endung oder ein vorangestellter Pfad haben bislang nicht funktioniert.


    Was soll das Ganze machen? Der Edomi-Pi soll beim Einschalten des RGB-Duschlichts einen Pi mit piCorePlayer einschalten, der mit Booten eine voreingestellte Playlisten (Radio) spielt. Mit Ausschalten des Duschlichtes läuft ein Edomi-Verzögerer, der die Spannungsversorgung des piCorePlayers zwecks Standbyverlustreduktion unterbricht. Von Edomi soll nun vor der Spannungsabschaltung (daher Verzögerer) der piCorePlayer mittels pcp sd heruntergefahren werden. Dieser Befehl befindet sich in dem Skript:
    1 #!/bin/bash
    2 ssh tc@[IP-piCorePlayer] pcp sd
    , welches auf dem Edomi-Pi liegt. Der Edomi-Pi kommuniziert passwortlos mit dem piCorePlayer aufgrund ausgetauschter SSH-Keys.
    Das Skript kann bereits auf dem Edomi-Pi auf Kommandozeilenebene ausgeführt werden, so dass nach meiner bisherigen Fehlersuche meine Konfiguration in der HTTP/UPD/SHELL-Funktion die Ursache sein müsste. (Irrtum vorbehalten.)



    #2
    Kann sich denn der User root ohne Passwort auf dem Zielrechner als User tc einloggen? Als root also:

    Code:
    ssh tc@<IP>
    Wenn es nur der ssh Befehl, den du ausführen willst, dann kannst du diesen direkt im Shell Fenster eingeben, am besten immer mit vollem Pfad, d.h.

    Code:
    /usr/bin/ssh tc@<IP> pcp sd

    Kommentar


      #3
      Klasse, vielen vielen Dank.
      Nein, unter root trat die Passwortabfrage vom piCorePlayer auf. Ich folgerte, dass die von mir erzeugten SSH-Schlüssel wohl nur für den ubuntu-User unter dem ich sie generiert hatte gültig sind. Daraufhin habe ich in der root-Sitzung ein weiteres Schlüsselpaar erzeugt und den öffentlichen Schlüssel auf den piCorePlayer übertragen. Nun klappt die Ausführung des Skript unter Edomi schlagartig. Mir war nicht klar, mit welchem User Edomi den Host „regiert“.
      Gerne nehme ich ggf. auch noch Ratschläge entgegen, ob die gewählte passwortfreie Kommunikation zwischen dem Edomi-Pi und dem piCorePlayer nicht über die SSH-Schlüssel sondern eine nur auf die Ausführung dieser Funktion beschränkte Lösung aus Sicherheitsaspekten umgestellt werden sollte.

      Kommentar


        #4
        Das ist schön okay so, solange der private Schlüssel von root auch nur für root lesbar ist.

        chmod 600 id_rsa

        ​​​​​​​Außerdem ist gut, dass die Verbindung auf das entfernte System nicht als root gemacht wird.

        Kommentar


          #5
          Ich muss mal den Thread wieder hochholen....
          Wie muss das ganze mit Passwortabfrage aussehen User: root Passwort :XXX?
          Ich will den Befehl
          Code:
          activator send com.apple.webapp
          über ssh an mein Jailbreak Ipad senden.

          Edit:
          Ich habe
          Code:
          sshpass -p XXX ssh root@IP-IPAD
          activator send com.apple.webapp​
          probiert aber ohne Erfolg. Über die Konsole funktioniert es aber damit.


          Edit: so nun habe ich es hinbekommen.... Fehler war das ich nicht alles in einer Zeile hatte....
          Zuletzt geändert von beauty; 18.01.2023, 18:25.

          Kommentar


            #6
            Zitat von beauty Beitrag anzeigen
            Über die Konsole funktioniert es aber damit.
            Du hast das aber in einer Zeile oder?
            Den Befehl "activator send com.apple.webapp​" würde ich in Anführungszeichen setzen.

            Kommentar


              #7
              Ja wenn alles in einer Zeile ist funktioniert es so wie es soll. Was bewirkt das wenn man den Befehl in "" setzt?

              Kommentar


                #8
                Zitat von beauty Beitrag anzeigen
                Was bewirkt das wenn man den Befehl in "" setzt?
                Es bewirkt, dass die Shell (hier vermutlich bash) nichts aus deinem Befehl interpretiert. Wenn in dem Befehl ein Schlüsselwort der Shell auftauchen würde, dann würde sie das zuerst interpretieren und der Befehl käme nicht korrekt am Zeil an. Ich denke nicht, dass es hier notwendig ist, aber es ist grundsätzlich eine gute Idee.

                Kommentar


                  #9
                  Aja...danke und gut zu wissen....

                  Kommentar


                    #10
                    Hoi André

                    Zitat von jonofe Beitrag anzeigen
                    Es bewirkt, dass die Shell (hier vermutlich bash) nichts aus deinem Befehl interpretiert.
                    Dem würde ich widersprechen. Das wäre der Fall bei einfachen Quotes. Er hat aber nach Double-Quotes gefragt und deren Inhalt wird sehr wohl erst interpretiert und danach verarbeitet.

                    Code:
                    ❯ echo "Home: $HOME"
                    Home: /home/starwarsfan
                    ❯ echo 'Home: $HOME'
                    Home: $HOME
                    ​
                    Kind regards,
                    Yves

                    Kommentar


                      #11
                      Zitat von starwarsfan Beitrag anzeigen
                      Dem würde ich widersprechen. Das wäre der Fall bei einfachen Quotes.
                      Da hast du natürlich Recht.

                      Zitat von starwarsfan Beitrag anzeigen
                      Er hat aber nach Double-Quotes gefragt und deren Inhalt wird sehr wohl erst interpretiert und danach verarbeitet.
                      Das gilt dann nur für die Zeichen $, \, ` und evtl. ! (falls history_expansion aktiviert ist).

                      Kommentar

                      Lädt...
                      X