Automatiser des commandes sudo via SSH

Re-bonjour tout le monde,

Je cherche à automatiser l’envoi de commandes SSH via l’outil n8n.

Cela fonctionne sans difficultés, sauf avec des commandes de type sudo, puisqu’il faut taper un mot de passe de manière interactive pour l’exécuter. J’ai beau chercher, je n’ai pas trouvé de solution magique.

Pour le moment, je m’oriente vers une modification du fichier de configuration sudoers pour autoriser l’utilisation d’une commande sans mot de passe, comme expliqué à ces deux liens :

Sauf que je ne pige pas. Je veux donner à un utilisateur le droit de faire sudo apt update.
Donc, j’ajoute la ligne : utilisateur ALL=(ALL) NOPASSWD: /usr/bin/apt ?

Si vous avez d’autres idées plus générales, je suis preneur.

Bonjour. Exemple de sudoers

User alias specification

User_Alias SPAML=nobody
User_Alias NMAP=www-data
User_Alias ALIAS=postfix,nobody

Cmnd alias specification

Cmnd_Alias SPAM=/usr/bin/sa-learn
Cmnd_Alias NMAP=/usr/bin/nmap
Cmnd_Alias ALIASCMD=/usr/local/bin/setVideo.sh, /usr/bin/sudo

User privilege specification

root ALL=(ALL:ALL) ALL

Allow members of group sudo to execute any command

%sudo ALL=(ALL:ALL) ALL
SPAML ALL=NOPASSWD: SPAM
NMAP ALL=NOPASSWD: NMAP
ALIAS ALL=NOPASSWD: ALIASCMD

···

Le 17/02/2026 à 17:08, Optogram via Alsace Réseau Neutre a écrit :

Re-bonjour tout le monde,

Je cherche à automatiser l’envoi de commandes SSH via l’outil n8n.

Cela fonctionne sans difficultés, sauf avec des commandes de type
sudo, puisqu’il faut taper un mot de passe de manière interactive pour
l’exécuter. J’ai beau chercher, je n’ai pas trouvé de solution magique.

Pour le moment, je m’oriente vers une modification du fichier de
configuration sudoers pour autoriser l’utilisation d’une commande sans
mot de passe, comme expliqué à ces deux liens :

Sauf que je ne pige pas. Je veux donner à un utilisateur le droit de
faire |sudo apt update|.
Donc, j’ajoute la ligne : |utilisateur ALL=(ALL) NOPASSWD: /usr/bin/apt| ?

Si vous avez d’autres idées plus générales, je suis preneur.


Voir le sujet https://forum.arn-fai.net/t/topic/12784/1 ou répondre
à cet e-mail pour répondre.

Vous recevez cet e-mail car vous avez activé la liste de diffusion.

Pour vous désabonner de ces e-mails, cliquez ici
<>.

Je ne comprends pas ce que je lis, peux-tu détailler l’extrait ?

Ce sont des alias d’utilisateurs SUDO et leurs Cmnd autorisée-s

Un exemple: l’utilisateur NMAP a le droit d’utiliser l’alias NMAP sans
mot de passe, la commande qui sera éxécutée est /usr/bin/nmap

···

Le 17/02/2026 à 18:12, Optogram via Alsace Réseau Neutre a écrit :

Je ne comprends pas ce que je lis, peux-tu détailler l’extrait ?


Voir le sujet https://forum.arn-fai.net/t/topic/12784/3 ou répondre
à cet e-mail pour répondre.

Vous recevez cet e-mail car vous avez activé la liste de diffusion.

Pour vous désabonner de ces e-mails, cliquez ici
<>.

Ne cherche pas plus loin, tu as la solution.

Personnellement, je coderai un script shell qui enrobe les commandes. Parce que dans ton cas, si un petit malin devient ton utilisateur, il pourra installer un paquet arbitraire.

adminuser ALL=(root) NOPASSWD: /root/.local/bin/system-updater
#!/usr/bin/env bash
# /root/.local/bin/system-updater

apt update
exec apt dist-upgrade -yqq

Et je maintiens mon sudoers dans /etc/sudoers.d/$machine

Mais j’avoue, le sudoers c’est assez cabalistique comme syntaxe :-/

1 « J'aime »

Et ensuite, tu lances le script en utilisateur standard ? L’emplacement ne pose pas de problème de droits ?

Oui.

En fait, quand sudo est exécuté, l’OS lui permet (grace au sticky bit) de changer de UID et UID effectif. Donc sudo s’exécute, regarde quel utilisateur il est (l’utilisateur qui a lancé la commande), change son UID vers root, lit sa configuration (qui normalement n’est pas accessible en lecture aux utilisateurs normaux), puis détermine s’il peut lancer la commande demandée avec l’utilisateur demandé. Si tout va bien, sudo va changer d’utilisateur (si besoin) et lancer la commande.

Je vais essayer tout ça maintenant :smiley:

Pour information, j’ai fait tourner le modèle gpt-oss:20b sur mon serveur pour lui poser la question :

Dans la syntaxe sudoers, que signifie cette ligne de configuration ? adminuser ALL=(root) NOPASSWD: /root/.local/bin/system-updater

Et voici les réponses :

Interprétation de la ligne

adminuser ALL=(root) NOPASSWD: /root/.local/bin/system-updater

Dans le fichier sudoers chaque entrée suit généralement la forme :

<utilisateur> <hôte> = (runas) <options> : <commande>

Voici ce que signifie chaque partie de votre ligne :

Élément Signification Exemple dans la ligne
adminuser Le nom de l’utilisateur (ou un alias d’utilisateur) qui reçoit le droit. adminuser
ALL La liste d’hôtes sur lesquels cette règle s’applique. ALL signifie tous les hôtes où le fichier sudoers est chargé. ALL
(root) Le runas‑user : l’utilisateur sous lequel la commande sera exécutée. Ici, la commande sera lancée en tant que root. (root)
NOPASSWD: Option indiquant qu’aucun mot‑de‑passe ne doit être demandé à l’utilisateur lorsqu’il exécute la commande. NOPASSWD:
/root/.local/bin/system-updater Le chemin absolu de la commande autorisée. Seul ce fichier précis est autorisé ; aucune autre commande ne peut être exécutée par cette règle. /root/.local/bin/system-updater

Ce que cela permet concrètement

  • L’utilisateur adminuser peut lancer :
    sudo /root/.local/bin/system-updater
    
  • Le script sera exécuté en tant que root.
  • Aucun mot‑de‑passe n’est requis lorsqu’il est lancé avec sudo.
  • Aucune autre commande n’est autorisée via cette entrée ; si adminuser essaie d’exécuter une autre commande avec sudo, la tentative sera refusée (ou demandera un mot‑de‑passe si aucune autre règle ne le permet).

Contexte d’utilisation

Cette syntaxe est fréquemment utilisée pour permettre à un administrateur (ou à un script) de mettre à jour le système automatiquement sans intervention manuelle, tout en limitant les privilèges à la commande exacte nécessaire.

Remarques de sécurité

  • Ne donnez ce type d’accès qu’à des scripts soigneusement vérifiés et testés.
  • Évitez d’autoriser l’exécution de commandes dans des répertoires peu sûrs.
  • Utilisez des alias (Cmnd_Alias, Runas_Alias, User_Alias) si vous avez besoin de gérer plusieurs commandes ou utilisateurs de façon plus claire.

En résumé, la ligne ci‑dessus autorise l’utilisateur adminuser à exécuter le script system-updater comme root sur n’importe quel hôte, sans qu’il ne doive saisir son mot‑de‑passe.

Alors, résultat des courses :

  • Sur un système Debian standard, avec un mot de passe et utilisateur root, ça marche.
  • Sur un système Debian Yunohost, il n’y a plus d’utilisateur root, ça marche pas.

@Aleks ou @ljf Comment ça se passe chez Yunohost ?

Je relance le sujet, je n’ai pas trouvé la solution à mon problème depuis :thinking:

J’ai publié un sujet sur le forum Yunohost aussi : https://forum.yunohost.org/t/execute-script-as-sudo-without-password/41693

Donc la doc n’est pas à jour ? https://doc.yunohost.org/en/admin/command_line