从 Jenkins 调用 sudo

从 Jenkins 调用 sudo

我有一台构建机器,其中的用户的abcsudo 访问权限有限。当我检查源代码并运行构建脚本时,它工作正常。构建脚本包含sudo未指定“sudo:不存在 tty 且未指定 Askpass 程序”的调用。但是,当我在添加为从机的构建机器上对 Jenkins 执行相同的操作时,它显示“sudo:不存在 tty,并且未指定 Askpass 程序”。

Default requiretty我找到了一种解决方案,说要在文件中注释掉/etc/sudoers。但我无权访问该文件。

我怎样才能克服这个问题?

答案1

它失败了,因为sudo正在尝试提示 root 密码并且没有分配伪 tty。

/etc/sudoers 您必须以 root 身份登录或在您的(或:)中设置以下规则sudo visudo

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

然后确保您的 Jenkins 用户属于admin组(或wheel)。

理想情况下(更安全),它将 root 权限仅限于可以指定为的特定命令%admin ALL=(ALL) NOPASSWD:/path/to/program

答案2

有两个选项,如您提到的那样注释掉Defaults requiretty/etc/sudoers 中的设置,或者使用伪 tty 分配 ( -t) 参数ssh

在您的詹金斯脚本中尝试以下操作:

ssh -t 127.0.0.1 "sudo command"

尽管您必须ssh为自己配置预共享密钥并手动运行一次以将条目添加到已知主机,但也可以添加参数-o StrictHostKeyChecking=nossh忽略这一点。

答案3

简单的方法来做到这一点
在此输入图像描述

$ sudo visudo
## Now add the below lines in your sudoers file :
jenkins ALL=(ALL) NOPASSWD: ALL

$service jenkins start

答案4

如果您通过 ssh 执行命令,则需要选中“Exec in pty”选项。 在此输入图像描述

相关内容