从Jenkins运行任何sudo命令时,出现以下错误:
sudo:没有tty present,也没有askpass程序
我知道我可以通过在/etc/sudoers文件中添加一个NOPASSWD条目来解决这个问题,它允许用户jenkins运行命令而不需要密码。 我可以添加一个像这样的条目:
%jenkins ALL=(ALL)NOPASSWD:/home/vts_share/test/sudotest.sh
…但这会导致以下问题: 如何避免在sudoers文件中指定完整path?
我可以添加一个像这样的条目:
%jenkins ALL=NOPASSWD: ALL
…但是这允许用户jenkins避免所有命令的密码提示,这似乎有点不安全。 我只是好奇我的select在哪里,如果有什么最佳做法,我应该考虑。
我相信你正在寻找这个man sudoersselect
requiretty If set, sudo will only run when the user is logged in to a real tty. When this flag is set, sudo can only be run from a login session and not via other means such as cron(8) or cgi-bin scripts. This flag is off by default.
这里是我的build议,从最安全到最不安全的顺序:
1)不要让jenkins sudo。 如果您正在构build包,请查看fakeroot 。 jenkins不需要root来构build软件。
2)如果你需要jenkins拥有根,可以考虑用sudoers Cmnd选项来限制sudo的能力。
3)在一次性虚拟机上运行jenkins。 如果有人根据它,重build它,并重新评估您的安全select。 我也build议将jenkins作为Intranet服务运行,只能通过LAN或VPN访问。 不要忘记包含身份validation!
如果您作为jenkins用户运行sudo作为脚本的一部分,则需要两件事情。
确切的命令副本.. like / bin / chown www-data / var / www
sudo -n确切的命令
-n会告诉它如果NOPASSWD不要求提示。
这固定了我在jenkins调用的脚本中运行sudo