使用织物如果我第二次回显 sudoers 文件,则文件损坏,第一次回显时运行正常。可能是什么原因?
第一个回声:
sudo('echo "django ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers')
第二次回声:
sudo('echo "celery ALL(www-data) NOPASSWD: /usr/bin/unoconv" | sudo tee -a /etc/sudoers')
在第二次 echo 命令之后,当我尝试执行 sudo 时,出现了解析错误,并且无法再次恢复 sudoers 文件,遗憾的是我必须创建一个新实例:
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting
第二条命令不存在语法问题,因为如果我手动输入它,visudo
它就可以正常工作。我不认为这是与 Fabric 相关的问题。Fabric 只是在远程服务器上执行命令。
答案1
正如所发布的,第二个回声中的行是错误的;我尝试手动添加
django ALL=(ALL:ALL) ALL
celery ALL(www-data) NOPASSWD: /usr/bin/unoconv
使用 visudo 添加到我的 sudoers 中,我也遇到了语法错误。您需要在第二行中的 (www-data) 之前添加 =。
一个在不破坏 sudoers 文件的情况下验证 sudo 语法的技巧:echo 'blah blah' | visudo -f - -c
。这至少会告诉您该行是否正常或有错误,而无需触碰您的 sudoers 文件。