如何在Fabric中运行任意sudo命令而无需输入密码?

7

根据这份文档,使用Fabric,您可以运行一个任意的shell命令,而不需要像这样拥有一个fabfile

fab -H host1,host2 -- echo 'hello, world!'

您也可以以同样的方式运行sudo命令,但是您需要为列表中的每个主机输入sudo密码。

是否有一种避免为每个主机输入sudo密码的方法,就像Fabric函数sudo()一样?


原帖似乎在询问如何在不为每个主机提示sudo密码的情况下执行以下操作:fab -H host0,host1,host2 -- sudo /root/bin/my_script_that_must_be_run_as_root.sh。我知道如何编写一个fabfile来完成它,但我也想知道如何作为一个add-hoc命令来完成它。在这种情况下,-I选项似乎不起作用。我正在使用Fabric 1.6.0进行测试。 - Carl
3个回答

3
只需将以下行添加到etc/sudoers文件中,其中myusername应为要运行sudo的预期用户。您应该了解执行以下操作的安全性问题。您还可能希望限制下面的选项以限制用户可以在没有密码的情况下使用sudo的命令。
myusername    ALL=(ALL) NOPASSWD: ALL

1
你可以设置env.password让fabric自动处理,或者...
...你也可以为多台机器使用密码:
from fabric import env
env.hosts = ['user1@host1:port1', 'user2@host2.port2']
env.passwords = {'user1@host1:port1': 'password1', 'user2@host2.port2': 'password2'}

请查看这个答案:https://dev59.com/L3E95IYBdhLWcg3wXsyR#5568219


0

您也可以考虑使用ssh密钥文件进行pam身份验证。这篇博客entry是一个不错的入门指南。

这样,您就不必牺牲安全性。假设您有一个合格的帐户,甚至可以在sudo操作之前将密钥文件复制到远程帐户中。 :-)


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