Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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)

Hors ligne

#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.

Hors ligne

#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).

Hors ligne

#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