脚本中无需密码的 sudo

脚本中无需密码的 sudo

我有无密码访问到服务器。我的用户帐户已添加sudoers申请禁止密码/etc/init.d/ 中某些服务/守护进程的使用。

我想写一篇脚本根据一些测试结果启动或停止守护进程。我已设置 cron 在特定时间运行此脚本。但它返回错误“sudo:没有 tty 存在且没有指定 askpass 程序”。

我可以在终端中使用“sudo /etc/init.d/service name start/stop”而无需密码。我没有 root 密码。

我仔细检查了 /etc/sudoers 文件。没有“requiretty”。我使用的是 Ubuntu-10.04,2.6.32-24-generic。

以下是 sudoers 中的活动行:

Defaults        env_reset
root    ALL=(ALL) ALL
bijo ALL=NOPASSWD: /etc/init.d/apache2
%sudo ALL=(ALL) ALL
%admin ALL=(ALL) ALL

答案1

如果您以与没有密码访问权限的用户相同的用户身份运行该脚本,那么它应该可以正常工作,我会确保该脚本以正确的用户身份运行,我还会通过以正确的用户身份手动调用该脚本来测试该脚本。

你可能还需要检查 sudoers 文件中是否存在以下行,或者是否有另一行表明你的用户不需要 TTY

Defaults requiretty

如果该行存在,您可以将其注释掉(这不是一个好主意),最好添加以下内容

Defaults:<USERNAME> !requiretty

其中 USERNAME 是您的用户

答案2

我认为你需要使用ssh -t

答案3

该投诉消息来自要求输入密码的代码部分,因此投诉是因为没有 tty,它无法禁用回显。您可以通过visiblepw在 sudoers 中设置选项来证明您处于此代码路径中,这将避免该警告并让您看到密码提示。

所以归根结底,控制出了问题NOPASSWD:

当匹配多个规则时sudoers最后的使用匹配,而不是最具体的匹配。因此用户bijo处于 %sudo 或 %admin 中;因此NOPASSWD:不应用控制。

在将自己添加到其中一个组后,在注销/登录之前,您是否在命令行进行过测试?

答案4

Defaults !requiretty在文件底部添加一行。这将明确关闭所有内容的 requiretty。

相关内容