我有一台构建机器,其中的用户的abc
sudo 访问权限有限。当我检查源代码并运行构建脚本时,它工作正常。构建脚本包含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=no
来ssh
忽略这一点。