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.
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:
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é