vache de bash (impossible d' éteindre un pc sous linux)
vache de bash (impossible d' éteindre un pc sous linux)
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
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
Re: vache de bash (impossible d' éteindre un pc sous linux)
Bonjour,
Impossible de t’aider sans voir les scripts bash en question.
Désolé
Philippe
Impossible de t’aider sans voir les scripts bash en question.
Désolé
Philippe
Re: vache de bash (impossible d' éteindre un pc sous linux)
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.
Re: vache de bash (impossible d' éteindre un pc sous linux)
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
@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
Re: vache de bash (impossible d' éteindre un pc sous linux)
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 ..
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 ..
Re: vache de bash (impossible d' éteindre un pc sous linux)
Domoticz est lancé en root? En utilisant ta commande logué en root ça fonctionne... ou pas?chrisgen a écrit : 15 avr. 2023, 15:02 Quand j appelle de domoticz un bash contenant ces commandes; rien
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).
Re: vache de bash (impossible d' éteindre un pc sous linux)
Bonjour
Oui , je pense être en root (je peux changer mon passwd sous pi).
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)
Mets 'sudo' devant la commande
Re: vache de bash (impossible d' éteindre un pc sous linux)
Bonjour
Je l' ai fait malheureusement rien ..
Je l' ai fait malheureusement rien ..
Re: vache de bash (impossible d' éteindre un pc sous linux)
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 .
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 .