【问题标题】:Fabric: prevent asking for passwordFabric:防止询问密码
【发布时间】:2014-04-30 11:42:10
【问题描述】:

我们有几十个同时运行的 Amazon EC2 现货实例。我们必须遍历所有这些实例并执行一些命令。但有时由于未知原因(可能是网络问题或其他)登录失败。因此,在某些情况下,fabric 不断要求输入密码,但我不希望它这样做。

代码:

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 的最新面料。

那么如何防止fabric 询问密码呢?谢谢!

【问题讨论】:

标签: python amazon-ec2 fabric


【解决方案1】:

您确定fabric 提示输入密码而不是另一端的sudo 之类的吗?查看fabric troubleshooting page 了解如何找出在提示的一些想法。

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

【讨论】:

  • 是的,这不是一个要求输入 sudo 密码的命令,因为 ubuntu 用户在 EC2 的 sudoers 组中,当我在那里手动执行一些命令时,它从未要求我输入 sudo 密码
【解决方案2】:

我找到了“提示时中止”选项。它在任何输入提示下执行 sys.exit()。这不完全是我所需要的,而且我看到有些人也希望它跳过这类事情,而不是终止。但是好的,我可以捕捉到退出信号并跳过当前主机。这不是一件好事,可能会产生副作用,但可能会被接受为临时解决方案。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 2013-03-20
      相关资源
      最近更新 更多