Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. exec mit sudo

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.7k

exec mit sudo

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
securityjavascript
6 Beiträge 3 Kommentatoren 770 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    Mephist0
    schrieb am zuletzt editiert von
    #1

    Ich möchte ein bash script via exec ausführen. Einer der Befehle in dem Script braucht sudo Rechte.
    Wie bekomme ich exec "überredet" ein Script als root auszuführen? Ich bekomme im Log die Fehlermeldung

    stdout: Error: Command failed: echo -e "MyPassword " | sudo -S MyBashScript We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: sudo: no password was provided sudo: 2 incorrect password attempts
    

    Das Passwort ist korrekt. Mein JavaScript command lautet:

    exec('echo -e "MyPassword\n" | sudo -S MyBashScript', function (error, stdout, stderr) {
                console.log('stdout: ' + stdout);
                console.log('stdout: ' + error);
     });
    

    Ich habe es schon mit und ohne '\n' probiert. Mein root user auf dem Raspberry heißt pi. Daher habe ich auch

    exec('echo -e "MyPassword\n" | sudo -S -u pi MyBashScript', function (error, stdout, stderr) {
    

    versucht. Leider auch vergeblich. Die Fehlermeldung bleibt dieselbe
    Habe leider in der Suche nichts gefunden. Hat jemand einen Tipp?

    PS: Bitte keine Diskussion darüber ob sudo hier Sinn macht oder ob man das tun sollte.

    T OliverIOO M 3 Antworten Letzte Antwort
    0
    • M Mephist0

      Ich möchte ein bash script via exec ausführen. Einer der Befehle in dem Script braucht sudo Rechte.
      Wie bekomme ich exec "überredet" ein Script als root auszuführen? Ich bekomme im Log die Fehlermeldung

      stdout: Error: Command failed: echo -e "MyPassword " | sudo -S MyBashScript We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: sudo: no password was provided sudo: 2 incorrect password attempts
      

      Das Passwort ist korrekt. Mein JavaScript command lautet:

      exec('echo -e "MyPassword\n" | sudo -S MyBashScript', function (error, stdout, stderr) {
                  console.log('stdout: ' + stdout);
                  console.log('stdout: ' + error);
       });
      

      Ich habe es schon mit und ohne '\n' probiert. Mein root user auf dem Raspberry heißt pi. Daher habe ich auch

      exec('echo -e "MyPassword\n" | sudo -S -u pi MyBashScript', function (error, stdout, stderr) {
      

      versucht. Leider auch vergeblich. Die Fehlermeldung bleibt dieselbe
      Habe leider in der Suche nichts gefunden. Hat jemand einen Tipp?

      PS: Bitte keine Diskussion darüber ob sudo hier Sinn macht oder ob man das tun sollte.

      T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      @mephist0

      Nach diesem Befehl

      sudo cat /etc/sudoers.d/iobroker
      

      versteht man diese Zeile besser

      iobroker ALL=(ALL) NOPASSWD: /path/to/script
      

      Ist aber möglich, das der fixer oder ein Update das rauswirft also besser in eine andere Datei.

      Noch eine kleine Anmerkung:
      Du solltest das Skript so mit Rechten versehen das User iobroker es nur ausführen kann, niemals schreiben und am besten auch nicht lesen. Beim Verzeichnis muss schreiben auch verboten sein, weiß abe rnicht mehr was öffnen und lesen genau macht.

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      1 Antwort Letzte Antwort
      1
      • M Mephist0

        Ich möchte ein bash script via exec ausführen. Einer der Befehle in dem Script braucht sudo Rechte.
        Wie bekomme ich exec "überredet" ein Script als root auszuführen? Ich bekomme im Log die Fehlermeldung

        stdout: Error: Command failed: echo -e "MyPassword " | sudo -S MyBashScript We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: sudo: no password was provided sudo: 2 incorrect password attempts
        

        Das Passwort ist korrekt. Mein JavaScript command lautet:

        exec('echo -e "MyPassword\n" | sudo -S MyBashScript', function (error, stdout, stderr) {
                    console.log('stdout: ' + stdout);
                    console.log('stdout: ' + error);
         });
        

        Ich habe es schon mit und ohne '\n' probiert. Mein root user auf dem Raspberry heißt pi. Daher habe ich auch

        exec('echo -e "MyPassword\n" | sudo -S -u pi MyBashScript', function (error, stdout, stderr) {
        

        versucht. Leider auch vergeblich. Die Fehlermeldung bleibt dieselbe
        Habe leider in der Suche nichts gefunden. Hat jemand einen Tipp?

        PS: Bitte keine Diskussion darüber ob sudo hier Sinn macht oder ob man das tun sollte.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #3

        @mephist0

        Bitte diesen Artikel sorgfältig lesen.
        Die erwähnten Dateien nur mit vissudo bearbeoten
        Am besten aber eine neue erzeugen die werden dann zusammengefasst.
        Wennannan dieser Stelle ohne vissudo bearbeitet kann man das komplette system sperren.
        Vissudo prüft das.

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        T 1 Antwort Letzte Antwort
        2
        • OliverIOO OliverIO

          @mephist0

          Bitte diesen Artikel sorgfältig lesen.
          Die erwähnten Dateien nur mit vissudo bearbeoten
          Am besten aber eine neue erzeugen die werden dann zusammengefasst.
          Wennannan dieser Stelle ohne vissudo bearbeitet kann man das komplette system sperren.
          Vissudo prüft das.

          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von
          #4

          @oliverio

          Ein link damit es auch nen beleg hat.

          https://unix.stackexchange.com/questions/27594/why-do-we-need-to-use-visudo-instead-of-directly-modifying-the-sudoers-file

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          OliverIOO 1 Antwort Letzte Antwort
          1
          • T ticaki

            @oliverio

            Ein link damit es auch nen beleg hat.

            https://unix.stackexchange.com/questions/27594/why-do-we-need-to-use-visudo-instead-of-directly-modifying-the-sudoers-file

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #5

            @ticaki
            stimmt,
            den hatte ich schon kopiert, aber vergessen einzufügen
            https://wiki.ubuntuusers.de/sudo/Konfiguration/

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            1 Antwort Letzte Antwort
            0
            • M Mephist0

              Ich möchte ein bash script via exec ausführen. Einer der Befehle in dem Script braucht sudo Rechte.
              Wie bekomme ich exec "überredet" ein Script als root auszuführen? Ich bekomme im Log die Fehlermeldung

              stdout: Error: Command failed: echo -e "MyPassword " | sudo -S MyBashScript We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: sudo: no password was provided sudo: 2 incorrect password attempts
              

              Das Passwort ist korrekt. Mein JavaScript command lautet:

              exec('echo -e "MyPassword\n" | sudo -S MyBashScript', function (error, stdout, stderr) {
                          console.log('stdout: ' + stdout);
                          console.log('stdout: ' + error);
               });
              

              Ich habe es schon mit und ohne '\n' probiert. Mein root user auf dem Raspberry heißt pi. Daher habe ich auch

              exec('echo -e "MyPassword\n" | sudo -S -u pi MyBashScript', function (error, stdout, stderr) {
              

              versucht. Leider auch vergeblich. Die Fehlermeldung bleibt dieselbe
              Habe leider in der Suche nichts gefunden. Hat jemand einen Tipp?

              PS: Bitte keine Diskussion darüber ob sudo hier Sinn macht oder ob man das tun sollte.

              M Offline
              M Offline
              Mephist0
              schrieb am zuletzt editiert von
              #6

              Today I learned a thing - or 2. Danke schonmal für eure Antworten.

              Dokumentation / Minimum Working Example für die Nachwelt:

              Ich habe ein test script "reboot" gebaut, das einfach nur einen Reboot durchführen soll.

              #!/bin/bash
              echo "sudo shutdown -r now"
              sudo shutdown -r now
              

              Das Script liegt in /opt/iobroker/. Mein JavaScript lautet:

               exec('sudo /opt/iobroker/reboot', function (error, stdout, stderr) {
                          console.log('stdout: ' + stdout);
                          console.log('stdout: ' + error);
               });
              

              Über das Kommando

              sudo visudo -f /etc/sudoers.d/iobroker
              

              habe ich in /etc/sudoers.d/iobroker folgende neue Zeile ergänzt

              iobroker ALL=(ALL) NOPASSWD: /opt/iobroker/reboot
              

              Auf Basis von @ticaki Hinweis, habe ich dem Script noch die Lese-Rechte entfernt (schreiben konnte es schon vorher nicht) mit dem command sudo chmod 751 reboot

              pi@iobroker-pi: $ ls -l /opt/iobroker
              -rwxr-xr-x+   1 pi       pi          388 Jul 30 10:36 reboot
              pi@iobroker-pi: $ sudo chmod 751 /opt/iobroker/reboot
              pi@iobroker-pi: $ ls -l /opt/iobroker
              -rwxr-x--x+   1 pi       pi          388 Jul 30 10:36 reboot
              

              Ich habe sicherheitshalber iobroker neu gestartet, damit die neuen Einträge auch wirklich neu eingelesen werden.
              Nun wird das Skript ausgeführt.

              Danke euch!

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              759

              Online

              32.4k

              Benutzer

              81.4k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe