Partage
  • Partager sur Facebook
  • Partager sur Twitter

[sudo] pas de tty présent et pas de programme askp

Permissions pour exécuter un script python

Sujet résolu
    7 mai 2020 à 17:26:30

    Bonjour à tous,

    Pour contextualiser mon problème : je suis sous Raspberry Pi (raspbian 10). J'ai un script shell qui (est censé) lancer un script python.

    Voici le contenu de mon script shell

    #!/bin/bash
    if [ "$PLAYER_EVENT" = "start" ]; then
      sudo python /home/pi/on.py
    fi
    

    Cependant, à l'exécution, je rencontre le problème suivant :

    sudo: pas de tty présent et pas de programme askpa

    Cela semble être un problème connu et une manière de le contourner serait de modifier le fichier visudo avec :

    sudo visudo

    Je rajoute donc à la fin de ce fichier la ligne suivante :

    pi ALL = NOPASSWD: /usr/bin/python, /home/pi/on.py

    Mais cependant rien n'y fait... Toujours le même message dans les logs.

    Me voilà désemparé, ne sachant plus que faire face à ce problème, alors si quelqu'un connaît ce pb ou aurait une idée, c'est avec plaisir !

    Merci beaucoup.


    -
    Edité par Henri Béry 7 mai 2020 à 21:30:20

    • Partager sur Facebook
    • Partager sur Twitter
      7 mai 2020 à 20:27:54

      Bonjour,

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Pour modifier votre titre, éditez le premier message de votre sujet.

      (titre originel : Problème de permissions à l'exécution d'un script)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        9 mai 2020 à 18:03:48

        Hum.... Alors je sais pas si c'est ton problème, mais sudo est très très Débile.

        Du coup, admettons que le problème vienne de là (et je n'en suis pas sûr), ton entrée SUDO est pas bonne

        Remplace plutôt par (Il faut retirer ta virgule):

        pi ALL = NOPASSWD: python /usr/bin/python

        Ou alors..Si tu veux être plus propre:

        pi ALL = NOPASSWD: /usr/bin/python /home/pi/on.py, python /home/py/on.py

        Dans tous les cas..SUDO va essayer de matcher EXACTEMENT ta commande...Bien sûr c'est pas très SAFE (il suffit de changer des arguments pour que ça soit différent), mais bon je pense que ça pourra résoudre ton problème.


        Cordialement.


        -
        Edité par petitradisgris 9 mai 2020 à 18:40:48

        • Partager sur Facebook
        • Partager sur Twitter

        Find various resources, tuturials and online tools at: https://finseckto.com

          9 mai 2020 à 19:02:17

          Merci pour ta réponse.

          visudo ne semble pas accéder cette syntaxe, sans la virgule, j'ai droit à un "erreur de syntaxe" à chaque fois...

          Cependant, je doute que mon problème soit résoluble en éditant visudo, puisque même un :

          pi ALL=(ALL) NOPASSWD: ALL

          ne règle pas le problème... Vraiment étrange

          En tout cas merci pour ton aide, je continue à creuser de mon côté.

          Cordialement

          • Partager sur Facebook
          • Partager sur Twitter
            9 mai 2020 à 21:55:42

            hmmm...

            Alors investiguons. Déjà Premières questions intermédiaires (pour être sûre de pouvoir reproduire la même chose):

            1- Quel est le contenu de ton fichier on.py (si il est diffusable)...Quelles sont les fonctionnalités qui nécessitent une élévation?

            2- Quelles sont tes contraintes: es-tu obligé de faire sudo dans ton script python? ne peux tu pas appeler ton script bash en sudo directement sans mettre sudo à l’intérieur....Cela change-t-il quelque chose/à une quelconque différence ?

            3- Tu ne passes pas par SSH ou quelque chose du genre qui pourrait altérer/faire varier la conf de ton tty?

            4- Comment appelles tu ton script?

            bash script.bash,

            ./script.bash,

            sh script.bash,

            sudo bash.script.bash????

            Considérant que tu as cela dans visudo :

            pi ALL=(ALL) NOPASSWD: ALL


            Peux tu essayer les commandes suivantes dans ton script (rajouter un -S à ton sudo):

            echo "DEBUG 1"
            sudo -S python /home/py/on.py
            echo "DEBUG 2" 


            Aussi: peux-tu sortir le retour des commandes:

            env
            echo $DISPLAY

            J'y verrais peut-être quelque chose.... ;)

            • Partager sur Facebook
            • Partager sur Twitter

            Find various resources, tuturials and online tools at: https://finseckto.com

              9 mai 2020 à 22:41:11

              Merci pour cette réponse. Ces pistes sont bonnes, on avance !

              Voici mon script python 

              import RPi.GPIO as GPIO
              import time
              
              GPIO.setmode(GPIO.BCM)
              GPIO.setwarnings(False)
              
              GPIO.setup(23, GPIO.OUT)
              
              GPIO.output(23,GPIO.HIGH)
              time.sleep(0.05)
              GPIO.output(23,GPIO.LOW)
              

              Sans le sudo j'ai

              RuntimeError: No access to /dev/mem.  Try running as root!

              Si ! Je suis en SSH... L'erreur pourrait en effet venir de là...

              Mon script est appelé par raspotify (un outil pour écouter spotify sur raspberry), aucune idée de la façon dont il l'appelle...

              En rajoutant un -S à sudo, j'ai quelque chose d'encourageant :

              [sudo] Mot de passe de raspotify : 
              sudo: aucun mot de passe fourni
              

              C'est donc rapsotify qui demande les droits.

              Retour de env

              SHELL=/bin/bash
              NO_AT_BRIDGE=1
              PWD=/home/pi
              LOGNAME=pi
              XDG_SESSION_TYPE=tty
              HOME=/home/pi
              LANG=fr_FR.UTF-8
              LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
              SSH_CONNECTION=192.168.1.37 61102 192.168.1.59 22
              XDG_SESSION_CLASS=user
              TERM=xterm
              USER=pi
              SHLVL=1
              XDG_SESSION_ID=c3
              XDG_RUNTIME_DIR=/run/user/1000
              SSH_CLIENT=192.168.1.37 61102 22
              PATH=/home/pi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
              MAIL=/var/mail/pi
              SSH_TTY=/dev/pts/0
              TEXTDOMAIN=Linux-PAM
              _=/usr/bin/env

              Et retour de echo $DISPLAY :

              Rien...

              Merci pour ce dépannage guidé ;)

              -
              Edité par Henri Béry 9 mai 2020 à 22:42:15

              • Partager sur Facebook
              • Partager sur Twitter
                12 mai 2020 à 16:23:09

                Suite et fin du feuilleton.

                Le problème venait du fait que j'entrais le mauvais utilisateur dans sudo visudo.

                Le demandeur des droits est l'utilisateur raspotify et non pi comme je pensais. Il faut donc rentrer dans sudo visudo :

                raspotify ALL = NOPASSWD: /usr/bin/python

                Merci beaucoup pour ton aide sans laquelle je n'aurais pas suivi la bonne piste !

                • Partager sur Facebook
                • Partager sur Twitter
                  23 mai 2020 à 16:55:02

                  Ah bien joué!

                  Je pense que tu as trouvé de toi même.

                  Je réfléchissais plutôt à l'idée que ta directive sudo ne choppait pas les bonnes variables d'environnement en SSH plutôt qu'en réel..mais bon.

                  Par contre je ne comprends pas du tout ta relation entre une appli pour avoir du spotify et l'utilisation de GPIO...Tu essayes de monter une main mécanique qui claque des doigts a chaque fois que spotify passe une pub? :p

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Find various resources, tuturials and online tools at: https://finseckto.com

                    1 juillet 2020 à 14:11:56

                    Ahah c'est moins poussé que ça ;)

                    J'ai installé Raspotify sur mon rapsberry pi, un super client pour Spotify Connect.

                    Puis je branche le raspberry sur ma chaîne hifi en jack, et grosso modo ce script allume ma chaîne hifi lorsque je veux écouter Spotify sur mon raspberry.

                    Moi fainéant ? Nooonn

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [sudo] pas de tty présent et pas de programme askp

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown