我正在尝试使用makefile编译一些源代码.在makefile中有一堆需要运行的命令sudo
.
当我从终端编译源时,一切正常,并且在第一次sudo
运行命令等待密码时暂停make .输入密码后,进行简历并完成.
但我希望能够在NetBeans中编译源代码.所以,我开始了一个项目,并展示了netbeans在哪里可以找到源代码,但是当我编译项目时,它会给出错误:
sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)
它第一次命中sudo
命令.
我在互联网上查找了这个问题,我发现的所有解决方案都指向一件事:禁用此用户的密码.由于这里的用户是root用户.我不想那样做.
还有其他解决方案吗?
小智 238
授予用户使用该命令而不提示输入密码应该可以解决问题.首先打开一个shell控制台并输入:
sudo visudo
Run Code Online (Sandbox Code Playgroud)
然后编辑该文件以添加到最后:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
Run Code Online (Sandbox Code Playgroud)
例如
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
Run Code Online (Sandbox Code Playgroud)
将允许用户john
sudo poweroff
,start
而stop
不会被提示输入密码.
在屏幕底部查看您需要在visudo中使用的击键 - 顺便说一句,这不是vi - 并且在没有保存时出现任何问题的第一个迹象.健康警告:破坏此文件会产生严重后果,请谨慎编辑!
小智 174
尝试:
NOPASSWD
对所有命令使用line,我的意思是:
jenkins ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)将该行放在sudoers
文件中的所有其他行之后.
这对我有用(Ubuntu 14.04).
小智 157
尝试:
ssh -t remotehost "sudo <cmd>"
Run Code Online (Sandbox Code Playgroud)
这将消除上述错误.
Vin*_*ent 116
在所有选择之后,我发现:
sudo -S <cmd>
Run Code Online (Sandbox Code Playgroud)
-S(stdin)选项使sudo从标准输入而不是终端设备读取密码.
上面的命令仍然需要输入密码.要手动删除输入密码,在jenkins等情况下,此命令有效:
echo <password> | sudo -S <cmd>
Run Code Online (Sandbox Code Playgroud)
rod*_*igo 41
sudo
默认情况下,将从连接的终端读取密码.您的问题是从netbeans控制台运行时没有连接终端.因此,您必须使用另一种方法输入密码:即称为askpass程序.
该askpass程序不是一个特定的程序,但可以要求提供密码的任何程序.例如在我的系统中x11-ssh-askpass
工作正常.
为此,您必须使用环境变量SUDO_ASKPASS
或sudo.conf
文件指定要使用的程序(man sudo
有关详细信息,请参阅参考资料).
您可以sudo
使用该选项强制使用askpass程序-A
.默认情况下,只有在没有连接的终端时才会使用它.
sNI*_*sss 23
试试这个:
echo '' | sudo -S my_command
Run Code Online (Sandbox Code Playgroud)
Vas*_*cal 19
对于Ubuntu 16.04用户
您需要阅读一个文件:
cat /etc/sudoers.d/README
Run Code Online (Sandbox Code Playgroud)
将文件0440中的文件放在/etc/sudoers.d/myuser中,内容如下:
myuser ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
应该解决这个问题.
不要忘记:
chmod 0440 /etc/sudoers.d/myuser
Run Code Online (Sandbox Code Playgroud)
Gub*_*ron 16
如果你有任何机会来到这里因为你不能在Windows10附带的Ubuntu内部进行sudo
从Windows编辑/ etc/hosts文件(带记事本),它将位于:%localappdata\lxss\rootfs\etc
,添加127.0.0.1 WINDOWS8
,这将摆脱它无法找到主机的第一个错误.
要摆脱no tty present
错误,总是这样做sudo -S <command>
小智 15
登录你的linux.触发命令.要小心,因为编辑sudoer是一个冒险的主张.
$ sudo visudo
Run Code Online (Sandbox Code Playgroud)
打开vi编辑器后,进行以下更改:
评论出来 Defaults requiretty
# Defaults requiretty
Run Code Online (Sandbox Code Playgroud)转到文件末尾并添加
jenkins ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)小智 12
在詹金斯:
echo '<your-password>' | sudo -S command
Run Code Online (Sandbox Code Playgroud)
例如: -
echo '******' | sudo -S service nginx restart
Run Code Online (Sandbox Code Playgroud)
您可以使用Mask Password Plugin隐藏密码
Ale*_*lls 10
这对我有用:
echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Run Code Online (Sandbox Code Playgroud)
你的用户是"myuser"的地方
对于Docker镜像,这只是:
RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
Run Code Online (Sandbox Code Playgroud)
确保您正在执行的命令是您的命令的sudo
一部分PATH
.
如果您有一个(或多个,但不是ALL)命令sudoers
条目,您将获得sudo: no tty present and no askpass program specified
命令不在路径中的时间(并且未指定完整路径).
您可以通过向您添加命令PATH
或使用绝对路径调用它来修复它,即
sudo /usr/sbin/ipset
代替
sudo ipset
命令sudo
失败,因为它尝试提示root密码并且没有分配伪tty(因为它是脚本的一部分).
您需要以root身份登录才能运行此命令或在/etc/sudoers
(或:)中设置以下规则sudo visudo
:
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)
然后确保您的用户属于admin
组(或wheel
).
理想情况下(更安全)将root权限限制为可以指定为的特定命令 %admin ALL=(ALL) NOPASSWD:/path/to/program
小智 6
我想我可以为某人提供帮助。
首先,我/etc/sudoers
参考上面的答案更改了用户设置。但是它仍然没有用。
myuser ALL=(ALL) NOPASSWD: ALL
%mygroup ALL=(ALL:ALL) ALL
Run Code Online (Sandbox Code Playgroud)
就我而言,myuser
在中mygroup
。
而且我不需要团体。因此,删除该行。
(不要像我一样删除该行,而只是标记评论。)
myuser ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
有用!
归档时间: |
|
查看次数: |
672423 次 |
最近记录: |