sudoers NOPASSWD: sudo: no tty present and no askpass program specified sudoers无需密码:sudo:未显示终端并且未指定askpass程序。

9
我已添加了一个用户,方法如下:
$ adduser --system --home /no/home --no-create-home --group --disabled-password --disabled-login testuser

将用户添加到组:

$ adduser testuser testgroup

在sudoers文件(visudo)中添加了行:

testuser    ALL=(ALL) NOPASSWD: ALL
%testgroup         ALL=(ALL:ALL) NOPASSWD: ALL

当我尝试运行以下内容的bash脚本时:

#!/bin/sh
sudo -u testuser /usr/bin/php /usr/local/bin/script.php

但是当我运行这个脚本时,日志中出现了错误:
sudo: no tty present and no askpass program specified

编辑:requiretty不在sudoers文件中。

1
sudo 权限不是关于你要更改的用户/组,而是关于你正在更改的用户。所以这些行是否允许 testuser 用户和 testgroup 组以任何身份运行任何命令(作为任何人)而无需密码?你需要给运行脚本的用户授予权限以作为 testuser 运行命令,这是你想要的吗?假设这就是你想要允许的。 - Etan Reisner
@EtanReisner 我也尝试过了,但仍然出现相同的错误。 - Tim Mishutin
你也尝试了什么?以 testuser 身份运行 sudo 命令吗?具体运行或尝试了什么?原始脚本是由哪个用户运行的? - Etan Reisner
1
@EtanReisner 你是对的。我必须为客户端组添加NOPASSWD。现在它可以正常工作了。谢谢。 - Tim Mishutin
3个回答

8
sudo权限是关于您正在更改的用户/组,而不是您要更改为的用户。

因此,这些权限行允许testuser用户和testgroup组以任何人的身份运行任何命令,无需密码。

您需要授予运行脚本的用户以作为testuser用户运行命令的权限,以实现您想要的目的。

假设这就是您要允许的内容。


4
当您的sudoers文件指定“requiretty”时,会出现该错误。从sudoers手册中可以看到:

如果设置了requiretty标志,那么sudo只能在与控制台相关联的终端上运行。这是为了防止通过网络攻击sudo进程。

   requiretty      If set, sudo will only run when the user is 
                   logged in to a real tty.  When this flag is set, 
                   sudo can only be run from a login session and not 
                   via other means such as cron(8) or cgi-bin scripts.  
                   This flag is off by default.
为了解决您的错误,请从sudoers文件中删除requiretty

谢谢,但没有帮助。requiretty不在sudoers文件中。我已经更新了我的问题。 - Tim Mishutin

0

我通过登录服务器并将以下行添加到ssh服务器配置中来解决了这个问题:

> vim /etc/ssh/sshd_config

Match User <your user name>
    PermitTTY yes

所以我不需要永久使用 -t 选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接