Fabric2 CLI:优雅地切换 SSH 用户



我正在使用 Invoke/Fabric 和 boto3 创建一个 AWS 实例并将其移交给 Ansible 脚本。为了做到这一点,在Ansible接管之前,必须在远程机器上准备一些东西,特别是安装Python,创建用户和复制公共SSH密钥。

AWS 映像附带特定用户。我只想使用此用户创建自己的用户,复制公钥,然后删除密码登录。使用结构 CLI 时,不会创建连接对象,也无法在任务中修改连接对象。

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

我可能不会以正确的方式去做(我正在从结构 1 迁移,其中 env 值的切换就足够了(。以下是我知道的一些策略,其中大多数都消除了我们一直依赖的一些灵活性。

  1. 创建一个自定义 AMI,其中已完成所有准备工作。
  2. 在用户设置的任务中创建本地连接对象,然后再回退到 Fabric CLI 提供的连接对象。
  3. 更深入地将 AWS 与 Ansible 集成(问题是我们的用户可能在实例处于活动状态后使用 Ansible,但没有 AWS 权限(。

我想这个列表还包括一个最佳实践问题。

AWS 映像附带特定用户。我想使用此用户 仅创建我自己的用户,复制公钥并删除密码登录 之后。使用结构 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)

最新更新