Fabric:防止要求输入密码

时间:2014-04-30 11:42:11

标签: python amazon-ec2 fabric

我们有几十个同时运行的Amazon EC2 spot实例。我们必须迭代所有这些实例并执行一些命令。但有时登录失败的原因不明(可能是网络问题或其他)。所以在某些情况下,面料不断要求输入密码,但我不希望它这样做。

代码:

env.hosts = [ip]
env.reject_interactive_password = True

env.hosts = ['%s@%s' % ('ubuntu', 'PASSWORD')]
env.host_string = '%s@%s' % ('ubuntu', ip)
env.user = 'ubuntu'
env.password = 'PASSWORD'

env.reject_unknown_hosts = False
env.disable_known_hosts = True

env.warn_only = True

run('some command')

正如您所看到的,我添加了reject_interactive_password,但遗憾的是它不起作用。如您所知,我们的循环在某个实例上挂起,我们无法联系到其他实例(这是一个问题)。

由于某些原因,我们不使用ssh证书,只使用基于密码的身份验证。

我们使用PIP的最新面料。

那么如何防止面料问密码呢?谢谢!

3 个答案:

答案 0 :(得分:0)

您确定该结构提示输入密码而不是另一端的sudo提示吗?请查看fabric troubleshooting page,了解如何找出 提示的人。

请查看使用env.passwords,因为您可以为每个主机字符串指定密码。你不应该这样做,但知道你可以做到这一点很好。如果您的命令没有利用shell语法,您可能还想尝试使用env.use_shell选项。我尝试了许多这些选项来克服一些类似的交互式密码提示。最终,我们开始使用基于SSH密钥的访问,因为它更简洁,更可靠。

答案 1 :(得分:0)

我发现'提示中止'选项。它在任何输入提示符上执行sys.exit()。这不是我需要的,我看到有些人希望它也能跳过这种事情,而不是终止。但好吧,我可以捕获退出信号并跳过当前主机。这不是一件好事,可能有副作用,但可能被接受作为临时解决方案。

答案 2 :(得分:0)

我假设您希望脚本在获得异常后继续运行。您可以调整连接超时并将代码包装在try: ... except:子句中。您可以捕获超时时获得的异常,只显示消息而不退出。