我无密码访问服务器。 我的用户帐户在sudoers文件中为/etc/init.d/中的某些服务/守护进程添加了NOPASSWD用法。
我想写一个脚本根据一些testing结果来启动或停止一个守护进程。 我已经设置了一个cron在特定的时间运行这个脚本。 但是它返回错误“sudo:没有tty存在,没有指定askpass程序”。
我可以使用“sudo /etc/init.d/service名称启动/停止在terminal没有密码。我没有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
如果你是作为一个没有密码访问的用户运行脚本,那么它应该正常工作,我会确保脚本运行正确的用户,我也会testing脚本通过手动调用它作为正确的用户。
您可能还需要检查sudoers文件中是否存在以下行,或者您有另外一行说明您的用户不需要TTY
Defaults requiretty
如果该行存在,您可以将其注释掉(不是一个好主意),可能最好添加以下内容
Defaults:<USERNAME> !requiretty
USERNAME是你的用户
我认为你需要使用ssh -t
这个抱怨信息来自于要求input密码的部分代码,所以抱怨,因为没有tty,它不能禁用回声。 您可以通过在sudoers中设置visiblepw选项向自己certificate您正处于此代码path中,这将避免该警告并让您看到密码提示。
所以最终, NOPASSWD:控制有些问题。
当sudoers中的多个规则匹配时,使用最后的匹配,而不是最具体的。 所以用户bijo在%sudo或%admin; 因此NOPASSWD:控制不适用。
在您将自己添加到其中一个组之后,您是否在注销之前进行了命令行testing?