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

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

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

sudo: no tty present and no askpass program specified

第一次执行sudo命令时。

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

还有其他解决办法吗?


当前回答

如果你将这一行添加到你的/etc/sudoers(通过visudo),它将解决这个问题,而不必禁用输入密码,当sudo的别名-S不起作用时(脚本调用sudo):

Defaults visiblepw

当然,自己阅读手册来理解它,但我认为对于我通过lxc exec实例—/bin/bash在LXD容器中运行的用例来说,它非常安全,因为它不会通过网络打印密码。

其他回答

詹金斯:

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

Eg:-

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

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

没有人告诉会导致这个错误的原因,如果从一个主机迁移到另一个主机,请记住在sudoers文件中检查主机名:

这是我的/etc/sudoers配置

User_Alias      POWERUSER = user_name
Cmnd_Alias SKILL = /root/bin/sudo_auth_wrapper.sh
POWERUSER hostname=(root:root) NOPASSWD: SKILL

如果不匹配

uname -a
Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux

它将弹出以下错误:

没有tty present,也没有指定askpass程序

1 打开 /etc/sudoers

输入sudo vi /etc/sudoers.这将以编辑模式打开您的文件。

2添加/修改linux用户

查找Linux用户的条目。如果找到,则按以下方式修改或添加新行。

<USERNAME> ALL=(ALL) NOPASSWD: ALL

3保存并退出编辑模式

Try:

ssh -t remotehost "sudo <cmd>"

这将消除上述错误。

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

sudo -S <cmd>

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

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

echo <password> | sudo -S <cmd>