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

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

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

sudo: no tty present and no askpass program specified

第一次执行sudo命令时。

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

还有其他解决办法吗?


当前回答

在所有的选择之后,我发现:

sudo -S <cmd>

-S (stdin)选项使sudo从标准输入而不是终端设备读取密码。

以上命令仍需输入密码。要手动删除输入密码,在jenkins这样的情况下,这个命令有效:

echo <password> | sudo -S <cmd> 

其他回答

我不确定这是否是最近的更改,但我刚刚遇到了这个问题,sudo -S为我工作。

Try:

ssh -t remotehost "sudo <cmd>"

这将消除上述错误。

命令sudo失败,因为它试图提示输入root密码,并且没有分配伪tty(因为它是脚本的一部分)。

您需要以root身份登录运行此命令,或者在/etc/sudoers中设置以下规则 (或:sudo visudo):

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

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

理想情况下(更安全),将根权限限制为只允许指定为%admin ALL=(ALL) NOPASSWD:/path/to/program的特定命令

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

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

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

sudo /usr/sbin/ipset

而不是

须藤ipset

詹金斯:

echo '<your-password>' | sudo -S command

Eg:-

echo '******' | sudo -S service nginx restart

你可以使用掩码密码插件来隐藏你的密码