我正在尝试使用makefile编译一些源代码。在makefile中,有一堆命令需要作为sudo运行。
当我从终端编译源代码时,一切都很好,并且在第一次运行sudo命令等待密码时,make会暂停。一旦我输入密码,做简历和完成。
但是我希望能够在NetBeans中编译源代码。所以,我开始了一个项目,并向netbeans展示了在哪里可以找到源代码,但当我编译项目时,它给出了错误:
sudo: no tty present and no askpass program specified
第一次执行sudo命令时。
我在网上查了这个问题,我找到的所有解决方案都指向一件事:禁用这个用户的密码。因为这里讨论的用户是根用户。我不想那样做。
还有其他解决办法吗?
作为参考,以防其他人遇到同样的问题,我在一个小时内被这个错误卡住了,因为我使用的是NOPASSWD参数,所以不应该发生这个错误。
我不知道的是,当没有tty并且用户尝试启动的命令不在/etc/sudoers文件中允许的命令的一部分时,sudo可能会引发完全相同的错误消息。
这里有一个简化的例子,我的文件内容与我的问题:
bguser ALL = NOPASSWD: \
command_a arg_a, \
command_b arg_b \
command_c arg_c
当bguser尝试在没有任何tty的情况下启动“sudo command_b arg_b”(bguser被用于某些守护进程)时,他将遇到错误“no tty present and no askpass program specified”。
Why?
因为在/etc/sudoers文件的末尾缺少一个逗号…
(我甚至怀疑这是否是预期的行为,而不是sudo中的错误,因为这种情况下正确的错误消息应该是“对不起,用户bguser不允许执行等”)
当我试图挂载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
现在我可以挂载驱动器,而不给我的用户太多额外的权利。
我得到这个错误是因为我限制了我的用户只有一个可执行的“systemctl”,并错误地配置了visudo文件。
以下是我得到的答案:
jenkins ALL=NOPASSWD: systemctl
然而,你需要包括可执行文件的完整路径,即使它默认在你的路径上,例如:
jenkins ALL=NOPASSWD: /bin/systemctl
这允许我的jenkins用户重新启动服务,但不具有完全的根访问权限