Лучшая практика, чтобы избежать ошибки Jenkins: sudo: нет tty настоящего и нет запрошенной программы
При запуске любой команды sudo от Jenkins я получаю следующую ошибку: sudo: no tty present and no askpass program specified
.
Я понимаю, что могу решить эту проблему, добавив запись NOPASSWD в мой /etc/sudoers
файл, который позволит пользователю jenkins запускать команды, не требуя пароля. Я могу добавить запись следующим образом:
%jenkins ALL=(ALL)NOPASSWD:/home/me/dir/script.sh
... но это приводит к следующей проблеме: https://stackoverflow.com/info/17414330/how-to-avoid-specifying-full-path-in-sudoers-file
Я могу добавить запись вроде этого:
%jenkins ALL=NOPASSWD: ALL
... но это позволяет пользователю jenkins избегать запроса пароля для команд ВСЕ, что кажется немного небезопасным. Мне просто интересно, какие у меня варианты, и если есть какие-то лучшие практики, которые я должен рассмотреть.
Ответы
Ответ 1
Незначительная вещь (requiretty
в sudoers) является реальной проблемой.
В принципе, закомментируйте следующие строки в файле /etc/sudoers:
#Defaults requiretty
#Defaults !visiblepw
Вышеприведенный из этого ответа на этот вопрос на сайте Exchange Unix и Linux Stack:
Ответ 2
Одна вещь, которую вы можете сделать, это заставить Дженкинса запустить script, например "run.sh",
то изнутри этого script вы можете запускать make файлы и следить за тем, чтобы внутри make файлов не было команд sudo.
Это немного хлопот, но по крайней мере вы не рискуете изменить настройки безопасности.