vache de bash (impossible d' éteindre un pc sous linux)

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Répondre
chrisgen
Messages : 64
Inscription : 06 janv. 2023, 22:22

vache de bash (impossible d' éteindre un pc sous linux)

Message par chrisgen »

Bonjour
Je précise en préambule que je connais mal le shell bash
Je souhaite contrôler une machine sous ubuntu à travers domoticz .
Pour la démarrer , pas de problème ,. J ‘utilise wakeonlan
J’ ai écrit un petit script que j’ appelle  sous domoticz:

script:///home/pi/domoticz/scripts/sh/wakeupserveur.sh

Cela fonctionne parfaitement

Pour éteindre la machine ubuntu qui nécessite un pass , j’ ai écrit le script shutdown2.sh que j’ exécute sur le pi :

sshpass -p Le_pass_machine_ubuntu ssh nom_user@adresse_Ip ./shutdownubu.sh

shutdownubu,sh est dans la machine linux et me permet de passer en sudo et de lancer shutdown

Je précise que chaque fichier sh est rendu exécutable ( chmod +x)

Si je lance dans le dossier home/pi/domoticz/scripts/sh/ bash shutdown2.sh ou ./shutdown2.sh , la machine s’ éteint parfaitement .

Quand j’ essaie sur Domoticz  avec un device :
script:///home/pi/domoticz/scripts/sh/shutdown2.sh
il retourne
Error executing script command (/home/pi/domoticz/scripts/sh/shutdown2.sh). returned: 32512
Si je crée un fichier test,sh qui appelle shutdown2.sh ; idem

J’ ai ajouté un & à la fin du script shutdown2.sh  ; il ne retourne plus d’ erreur dans domoticz
mais si je le lance sous console donc avec & final  :
il me retourne : ( j’ ai utilisé expect dans le fichier pc)
interact: spawn id exp0 not open
while executing
"interact -o -nobuffer -re $prompt return"
qui indique (si j' ai compris) que expect était fermé

J’ ai essayé également :
os.execute('/home/pi/domoticz/scripts/sh/./test.sh') sans succès (pas d' erreur pas de réaction)
Mes recherches sur le net ne m’ ont guère éclairé .
Si quelqu’un à une idée ..
Merci par avance
PhiPhi
Messages : 28
Inscription : 03 déc. 2018, 08:45

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par PhiPhi »

Bonjour,

Impossible de t’aider sans voir les scripts bash en question.

Désolé
Philippe
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par lost »

chrisgen a écrit : 03 avr. 2023, 23:11 ( j’ ai utilisé expect dans le fichier pc)
Si cela fonctionne sur la machine à éteindre avec le même utilisateur, pas de raison que cela ne fonctionne pas via ssh. Probable donc qu'il y ait un pb de connection si expect donne le mot de passe qui est également alors en clair dans les scripts.

Mieux vaudrait procéder par clef ssh, sans passphrase, pour éviter de devoir utiliser expect. Idéalement via un utilisateur spécialement créé sans droits d'administration sur la machine Ubuntu à éteindre et qui soit sudoer sans mot de passe juste sur la commande exacte utilisée par le script niveau shutdown.
chrisgen
Messages : 64
Inscription : 06 janv. 2023, 22:22

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par chrisgen »

Bonsoir
@lost : le bash fonctionne parfaitement lorsque je le fait fonctionner en ligne de commande du pi
le bash shutdown2.sh contient :
attention j’ utilise sshpass que j’ ai installé et qui permet de me connecter en donnant le psswd
suivant la syntaxe suivante :
sshpass -p pass_machine_à_eteindre ssh nom_user@adresse_Ip ./shutdownubu.sh

@phiphi le bash sur le pi est dans mon premier post et ci-dessus
le bash sur la machine ubuntu shutdownubu.sh :
#!/usr/bin/expect
set timeout -1
spawn su
set prompt ":|#|\\\$"
interact -o -nobuffer -re $prompt return
send "le_mot_de_passe_de_la_machine\r"
interact -o -nobuffer -re $prompt return
send "ls\r"
interact -o -nobuffer -re $prompt return
send "shutdown now\r"
interact
expect eof


Quand je lance sur mon pi dans le dossier home/pi/domoticz/scripts/sh/ le bash shutdown2.sh
cela fonctionne sans problème , j’ éteins la machine.
Quand je le lance de domoticz , cela ne fonctionne pas ..
Je pense qu’ il s’ agit d’ un problème au niveau de domoticz et de l’ exécution des scripts
J’ ai trouvé sur certains sites anglophones (je maîtrise assez mal l’ anglais ..) le même type de problème apparemment sans solution .
Effectivement ta solution paraît être la bonne (je l’ avais survolée récemment dans un forum) mais je ne sais pas si j’ arriverais à la mettre en œuvre .. En tout cas merci pour ta réponse
chrisgen
Messages : 64
Inscription : 06 janv. 2023, 22:22

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par chrisgen »

Bonjour
J’ ai donc testé la création d’ un utilisateur sans droits d’ administration avec droit sur shutdown (@lost)
Donc dans la machine à éteindre , sous root j’ ai appelé visudo
j’ ai rajouté
user_shutdown ALL=(ALL) NOPASSWD:/usr/sbin/shutdown,/usr/sbin/systemctl

Quand je lance  sur le pi :
sshpass -p mot_de_passe_user_shutdown ssh user_shutdown@adresse_ip ‘sudo shutdown now’
la machine s’ éteint . (comme dans le premier script)
Quand j appelle de domoticz un bash contenant ces commandes; rien
Je me retrouve dans la même situation ..
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par lost »

chrisgen a écrit : 15 avr. 2023, 15:02 Quand j appelle de domoticz un bash contenant ces commandes; rien
Domoticz est lancé en root? En utilisant ta commande logué en root ça fonctionne... ou pas?
AMHA, c'est un problème d'utilisateur différent selon les cas. Attention car root n'a pas forcément les même path qu'un utilisateur lambda (même sudoer) voir le même shell (avec des pb de compatibilité possibles).
chrisgen
Messages : 64
Inscription : 06 janv. 2023, 22:22

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par chrisgen »

Bonjour
Oui , je pense être en root (je peux changer mon passwd sous pi). ;)
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par pierrotori »

Mets 'sudo' devant la commande
chrisgen
Messages : 64
Inscription : 06 janv. 2023, 22:22

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par chrisgen »

Bonjour
Je l' ai fait malheureusement rien .. ;)
chrisgen
Messages : 64
Inscription : 06 janv. 2023, 22:22

Re: vache de bash (impossible d' éteindre un pc sous linux)

Message par chrisgen »

Bonjour
J' ai donc pris le temps de la réflexion après les remarques de @lost , et après quelques tests , j' ai relu avec plus d' acuité les archives du forum (2016..)(viewtopic.php?t=1813) . Une (grosse) partie de la réponse avait été donnée par Pyrrhus (merci à lui).
La commande dans le bash s' écrit donc :
sudo -u pi sshpass mot_de_passe_user_shutdown ssh user_shutdown@adresse_ip sudo shutdown now > /dev/null 2>&1 &
user_shutdown étant l' utilisateur ayant droit juste au shutdown.
Et ça marche !
Résolu .
Merci aux différents contributeurs qui m' ont aidé dans mon cheminement .
Répondre