web-dev-qa-db-fra.com

Meilleures pratiques pour éviter l'erreur Jenkins: Sudo: aucun tty présent et aucun programme askpass spécifié

Lors de l'exécution d'une commande Sudo à partir de Jenkins, j'obtiens l'erreur suivante: Sudo: no tty present and no askpass program specified.

Je comprends que je peux résoudre ce problème en ajoutant une entrée [~ # ~] nopasswd [~ # ~] à mon /etc/sudoers fichier qui permettra à l'utilisateur jenkins d'exécuter des commandes sans avoir besoin d'un mot de passe. Je peux ajouter une entrée comme celle-ci:

%jenkins ALL=(ALL)NOPASSWD:/home/me/dir/script.sh

... mais cela conduit au problème suivant: https://stackoverflow.com/questions/17414330/how-to-avoid-specifying-full-path-in-sudoers-file

Je peux ajouter une entrée comme celle-ci:

%jenkins ALL=NOPASSWD: ALL

... mais cela permet à l'utilisateur jenkins d'éviter le mot de passe Demander [~ # ~] toutes les commandes [~ # ~] , ce qui semble un peu dangereux . Je suis simplement curieux de savoir quelles sont mes options ici, et s'il existe des meilleures pratiques, je devrais envisager.

26
s g

Le no tty (requiretty in sudoers ) est le vrai problème.

Fondamentalement, mettez en commentaire les lignes suivantes dans votre fichier /etc/sudoers :

#Defaults    requiretty
#Defaults   !visiblepw

Ce qui précède est tiré de cette réponse à cette question sur le site Unix & Linux Stack Exchange:

12
Electrawn

Une chose que vous pouvez faire est d'amener Jenkins à exécuter un script, par exemple 'run.sh', puis à l'intérieur de ce script, vous pouvez démarrer les makefiles et vous assurer qu'il n'y a pas de commandes Sudo dans les makefiles.

C'est un peu compliqué, mais au moins vous ne risquez pas de changer les paramètres de sécurité

4
serup