我正在尝试使用makefile编译一些源代码。在makefile中,有一堆命令需要作为sudo运行。

当我从终端编译源代码时,一切都很好,并且在第一次运行sudo命令等待密码时,make会暂停。一旦我输入密码,做简历和完成。

但是我希望能够在NetBeans中编译源代码。所以,我开始了一个项目,并向netbeans展示了在哪里可以找到源代码,但当我编译项目时,它给出了错误:

sudo: no tty present and no askpass program specified

第一次执行sudo命令时。

我在网上查了这个问题,我找到的所有解决方案都指向一件事:禁用这个用户的密码。因为这里讨论的用户是根用户。我不想那样做。

还有其他解决办法吗?


当前回答

登录到您的linux。执行以下命令。要小心,因为编辑sudoer是一个有风险的命题。

$ sudo visudo

vi编辑器打开后,进行以下更改:

注释掉默认值是必需的 #默认值是必须的 转到文件末尾并添加 NOPASSWD:所有

其他回答

这个问题的解决办法是

如果您在Jenkins实例之外的任何地方遇到了这个问题,请从第二步开始。第一步是针对遇到Jenkins实例问题的用户。

转到谷歌云控制台的Jenkins实例。 输入命令 sudo苏

Visudo -f /etc/sudoers

在末尾添加以下一行

jenkins所有= NOPASSWD:所有

在这里签出以了解此问题的根本原因

确保你正在执行的命令是你的PATH的一部分。

如果您有一个(或多个,但不是ALL)命令sudoers条目,当命令不是路径的一部分(并且没有指定完整路径)时,您将得到sudo: no tty present和没有指定askpass程序。

您可以通过将命令添加到PATH或使用绝对路径调用它来修复它。

sudo /usr/sbin/ipset

而不是

须藤ipset

运行包含来自jenkins的sudo命令的shell脚本可能无法按预期运行。要解决这个问题,请遵循以下步骤

简单的步骤:

在基于ubuntu的系统中,运行" $ sudo visudo " 这将打开/etc/sudoers文件。 如果jenkins用户已经在该文件中,那么修改如下:

詹金斯

保存文件 重新开始你的jenkins工作 你不应该再看到错误信息:)

试试这个:

echo '' | sudo -S my_command

其他选项,不基于NOPASSWD:

Start Netbeans with root privilege ((sudo netbeans) or similar) which will presumably fork the build process with root and thus sudo will automatically succeed. Make the operations you need to do suexec -- make them owned by root, and set mode to 4755. (This will of course let any user on the machine run them.) That way, they don't need sudo at all. Creating virtual hard disk files with bootsectors shouldn't need sudo at all. Files are just files, and bootsectors are just data. Even the virtual machine shouldn't necessarily need root, unless you do advanced device forwarding.