#1 Le 20/09/2021, à 13:58
- _matt_44
[ssh] Réaliser un shutdown à distance
Bonjour à tous,
dans le cadre d'un script je cherche à effectuer un shutdown sur une machine distante (ubuntu) depuis un hôte sous linux (Raspberry Pi).
Actuellement j'ai toujours le prompt qui m'invite à taper mon password afin de valider l'action...ce que je ne souhaite pas bien évidemment.
Cela se joue a priori du côté du fichier sudoers (que je ne maitrise pas beaucoup).
Machine distante contenu du fichier sudoers :
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
matthieu ALL=(ALL) NOPASSWD: /usr/sbin/shutdown
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Comme on peux le voir j'ai ajouté la ligne suivante :
matthieu ALL=(ALL) NOPASSWD: /usr/sbin/shutdown
Mais sur la machine local quand je me connecte j'ai ça :
pi@pi-mgy:~ $ ssh -t pcmatt 'sudo shutdown -r now'
[sudo] Mot de passe de matthieu :
ce qui ne me parait pas logique car quand je me connecte de manière classique je tombe bien sur mon user (matthieu) :
pi@pi-mgy:~ $ ssh pcmatt
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.11.0-34-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 mise à jour peut être appliquée immédiatement.
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Mon Sep 20 14:55:14 2021 from 192.168.1.21
matthieu@matthieu-PC:~$
Merci par avance pour votre aide.
Matthieu
Hors ligne
#2 Le 20/09/2021, à 15:16
- bruno
Re : [ssh] Réaliser un shutdown à distance
Bonjour,
Plutôt que de modifier le fichier sudoers, ce qui comporte toujours des risques, il vaut mieux utiliser les bonnes commandes :
ssh matthieu@machine_a_eteindre systemctl poweroff
Explications :
- /usr/sbin/shutdown n'existe pas sous Ubuntu. À ma connaissance ce n'est là que sur les installations récentes d'une Debian. Sous Ubuntu 20.04 c'est /sbin/shutdown
- /sbin/shutdown n'est qu'un lien symbolique vers systemctl, la bonne commande est donc :
systemctl poweroff
- normalement tous les administrateurs (membres du groupe sudo) authentifiés sont autorisés à éteindre la machine via polcykit
Dernière modification par bruno (Le 20/09/2021, à 15:28)
#3 Le 20/09/2021, à 15:26
- _matt_44
Re : [ssh] Réaliser un shutdown à distance
pi@pi-mgy:~/Documents/Scripts $ ssh pcmatt systemctl poweroff
Failed to set wall message, ignoring: Interactive authentication required.
Failed to power off system via logind: Interactive authentication required.
Failed to start poweroff.target: Interactive authentication required.
See system logs and 'systemctl status poweroff.target' for details.
pi@pi-mgy:~/Documents/Scripts $ ssh -t pcmatt systemctl poweroff
==== AUTHENTICATING FOR org.freedesktop.login1.set-wall-message ===
Authentification requise pour définir un message wall
Authenticating as: Matthieu,,, (matthieu)
Password:
J'ai vérifier et le lien symbolique est également présent pour le /usr/sbin/shutdown. J'ai néanmoins tester votre solution qui me pose le même problème.
Hors ligne
#4 Le 20/09/2021, à 15:43
- bruno
Re : [ssh] Réaliser un shutdown à distance
J'ai précisé après coup : il faut que l'utilisateur soit membre du groupe sudo.
Le second retour indique clairement que tu tentes d'éteindre la machine alors que un ou plusieurs utilisateurs y ont des sessions actives. Ce qui impose d'afficher un message avertissant de l’extinction imminente à tous les utilisateurs (wall message) Dans ce cas seul root peut le faire.
Si tu veux forcer l’extinction malgré les sessions utilisateur actives il faut soit le faire siplement en root :
ssh root@machine_a_eteindre systemctl poweroff
soit surcharger les règles policykit sur la machine à éteindre en créant un fichier /etc/polkit-1/rules.d/50-allow-shutdown.rules :
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.halt-multiple-sessions"
&& subject.isInGroup("sudo") )
{
return polkit.Result.YES;
}
});
qui autorise les membres du groupe sudo à éteindre la machine même si d'autres utilisateurs ont des session actives.
#5 Le 20/09/2021, à 16:20
- Lolorase
Re : [ssh] Réaliser un shutdown à distance
Hello,
Pourquoi utiliser systemctl ?
Les commandes sont simplement :
poweroff
ou
reboot -p
Hors ligne
#6 Le 20/09/2021, à 17:42
- _matt_44
Re : [ssh] Réaliser un shutdown à distance
en fait toutes ces commandes fonctionnent mais elle demande la confirmation du password...j'avoue je sèche.
Hors ligne
#7 Le 20/09/2021, à 19:46
- _matt_44
Re : [ssh] Réaliser un shutdown à distance
J'ai trouvé une alternative avec sshpass mais c'est pas très secure...bon c'est un script qui tourne sur un réseau personnel donc ca va mais bon si quelqu'un à une idée pour éviter le prompt du password je suis preneur !
Hors ligne
#8 Le 20/09/2021, à 22:01
- alex2423
Re : [ssh] Réaliser un shutdown à distance
En utilisant une clef privée avec ssh-agent ?
Hors ligne
#9 Le 21/09/2021, à 06:59
- bruno
Re : [ssh] Réaliser un shutdown à distance
@Lolorase : de la même manière tes commandes ne sont que des liens symboliques vers systemctl :
ls -l /sbin/poweroff
lrwxrwxrwx 1 root root 14 sept. 7 20:37 /sbin/poweroff -> /bin/systemctl
@_matt_44 :
la commande donnée en #4 doit fonctionner sans aucune demande de mot de passe si l'authentification se fait par clés (ne pas mettre de phrase de passe sur la clé privée).
#10 Le 21/09/2021, à 09:27
- Tawal
Re : [ssh] Réaliser un shutdown à distance
Hello,
Avec la commande "systemctl poweroff", on peut utiliser l'option "--no-wall".
Ce qui donne :
systemctl --no-wall poweroff
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne