我正在尝试使用makefile编译一些源代码。在makefile中,有一堆需要以`sudo'身份运行的命令。
当我从终端编译源代码时,一切都很顺利,但在第一次运行sudo
命令时,make暂停,等待密码。一旦我输入密码,make就恢复并完成了。
但是我希望能够在NetBeans中编译源代码。所以,我启动了一个项目,并向netbeans展示了在哪里可以找到源代码,但是当我编译这个项目时,却出现了错误。
sudo: no tty present and no askpass program specified
第一次碰到sudo
命令。
我在网上查找了这个问题,我发现的所有解决方案都指向一件事:禁用这个用户的密码。由于这里的用户是root。我不想这样做。
有什么其他的解决办法吗?
允许用户使用该命令而不提示密码应该可以解决问题。首先打开一个shell控制台,输入
sudo visudo
然后编辑该文件,在最末尾添加。
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
例如
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
将允许用户john
sudo poweroff
, start
和 stop
而不被提示密码。
在屏幕底部查看你在visudo中需要使用的按键--顺便说一下,这不是vi--在出现任何问题的第一时间退出,而不保存。健康警告:破坏这个文件将产生严重的后果,编辑时要小心!
试试吧。
ssh -t remotehost "sudo <cmd>"
这将消除上述错误。
sudo
在默认情况下会从连接的终端读取密码。你的问题是,当它从netbeans控制台运行时,没有连接终端。所以你必须使用另一种方法来输入密码:这就是所谓的askpass程序。
askpass程序不是一个特定的程序,而是任何可以要求输入密码的程序。例如,在我的系统中,x11-ssh-askpass
工作得很好。
为了做到这一点,你必须指定使用什么程序,可以通过环境变量SUDO_ASKPASS
或在sudo.conf
文件中指定(详见man sudo
)。
你可以通过使用选项-A
强制sudo
使用askpass程序。默认情况下,它只在没有连接终端的情况下使用。