Fabric2 CLI:正常切换SSH用户

时间:2018-07-03 17:18:29

标签: python invoke fabric

我正在将Invoke / Fabric与boto3一起使用来创建一个AWS实例并将其移交给Ansible脚本。为此,在Ansible接管之前,必须在远程计算机上做一些准备工作,特别是安装Python,创建用户和复制公共SSH密钥。

AWS映像随附于特定用户。我只想使用此用户来创建自己的用户,复制公共密钥并在以后删除密码登录。使用Fabric CLI时,不会创建连接对象,并且无法在任务中对其进行修改。

切换用户(又是在任务之间重新创建连接对象)并与刚创建的用户运行以下任务的好方法是什么?

我可能不会以正确的方式进行处理(我正在从结构1迁移,其中环境值的切换已足够)。我知道一些策略,其中大多数消除了我们一直依赖的灵活性。

  1. 创建一个已经完成所有准备工作的自定义AMI。
  2. 在回退到Fabric CLI提供的连接对象之前,在用户设置任务中创建本地连接对象。
  3. Deeper将AWS与Ansible集成在一起(问题是,我们有一些用户在实例运行后可能会使用Ansible,但没有AWS特权)。

我想这个清单也包括一个最佳实践问题。

1 个答案:

答案 0 :(得分:0)

  

AWS映像随附于特定用户。我想使用这个用户   仅用于创建我自己的用户,复制公共密钥并删除密码登录   然后。使用Fabric CLI时,未创建连接对象   并且不能在任务中修改。

我不确定这是正确的。我已经在执行任务的过程中切换了用户。您只需确保需要更新的env的所有后续调用都使用execute操作。

例如

def create_users():
    run('some command')

def some_other_stuff():
    run('whoami')

@task
def new_instance():
    # provision instance using boto3
    env.host = [ ip_address ]
    env.user = 'ec2-user'
    env.password = 'sesame'
    execute(create_users)
    env.user = 'some-other-user'
    execute(some_other_stuff)