pythonfabric:在同一个脚本中用不同的密码在不同的主机上执行函数

2024-05-15 23:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试自动化部署过程,涉及3台不同的机器:

  • 在用户A@hostA,普华永道
  • 在用户b@hostB,普华永道
  • 在用户c@hostC,普华永道

下面是我想使用Python的Fabric库执行的场景(我是新来的):

def deploy():
    execute(taskA, hosts=[hostA])
    execute(taskB, hosts=[hostB])
    execute(taskC, hosts=[hostC])

我尝试过如下设置变量 env.passwords

^{pr2}$

但它会使SSH连接挂起。在

我目前的解决方法是在每次调用execute之前修改变量env.userenv.password(我也可以在taskA、taskB和taskC的开头这样做)。我真的不觉得那很优雅,完全脱离了布料的精神。在

如果有人遇到这种情况,在尝试使用env.passwordsdict时发现他/她有一个挂起的SSH连接,那么我就是你的了!当然,如果有人已经成功地实现了更优雅的多主机密码处理,我很乐意听到任何提示。在


Tags: 用户env机器execute过程部署sshfabric
2条回答

正如我在上面的评论中所说,使用use-ssh\u-config变量效果很好。但是,如果您使用密码进行SSH,Fabric当前无法处理每主机/每个用户/每个密码的连接(这是正常的,因为使用SSH密码被认为是不安全的)

这就是为什么我深入研究了Fabric的源代码,并添加了新的“特性”。Here是我的存储库,如果你想看看的话。基本上,我使用了env.roledefs变量,它将角色作为字典条目列出。每个角色都有一个主机、用户和密码的列表。现在,如果要在一个或多个主机(具有不同的用户名和密码)中执行任务,有两种方法可以执行:

  • 用修饰符@complete_roles('role1', 'role2')注释任务
  • 使用函数execute(task, complete_roles=['role1', 'role2'])

只要确保在env.roledefs中有'role1'和'role2'作为键

如果你想知道更多关于我的贡献的信息,只需检查两个最新的提交。我知道,我的代码不是最干净的。。。在

最好将您的ssh详细信息保存在~/.ssh/config中,并让Fabric使用它。看到了吗

相关问题 更多 >