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

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

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

sudo: no tty present and no askpass program specified

第一次执行sudo命令时。

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

还有其他解决办法吗?


当前回答

当我试图挂载sshfs时,我有同样的错误消息,需要sudo:命令是这样的:

sshfs -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

通过添加选项-o debug

sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

对于这个问题,我也有同样的意思:

sudo: no tty present and no askpass program specified

所以通过阅读其他人的答案,我开始在/etc/sudoer中创建一个文件D /user在my.server.tld

user ALL=NOPASSWD: /usr/lib/openssh/sftp-server

现在我可以挂载驱动器,而不给我的用户太多额外的权利。

其他回答

使用管道:

echo your_pswd | sudo -S your_cmd

使用here文档:

sudo -S cmd <<eof
pwd
eof
#remember to put the above two lines without "any" indentations.

打开终端询问密码(以任何可行的方式):

gnome-terminal -e "sudo cmd"
xterm -e "sudo cmd"

詹金斯:

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

Eg:-

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

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

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

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

sudo -S <cmd>

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

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

echo <password> | sudo -S <cmd> 

适用于Ubuntu 16.04用户

有一个文件你必须阅读:

cat /etc/sudoers.d/README

在/etc/sudoers.目录下放置模式为0440的文件D /myuser,内容如下:

myuser  ALL=(ALL) NOPASSWD: ALL

应该能解决这个问题。

不要忘记:

chmod 0440 /etc/sudoers.d/myuser