python - Fabric2 CLI:优雅切换 SSH 用户
问题描述
我正在使用 Invoke/Fabric 和 boto3 创建一个 AWS 实例并将其交给 Ansible 脚本。为了做到这一点,在 Ansible 接管之前,必须在远程机器上准备一些东西,特别是安装 Python、创建用户和复制公共 SSH 密钥。
AWS 映像随特定用户一起提供。我只想使用这个用户来创建我自己的用户,复制公钥,然后删除密码登录。使用 Fabric CLI 时,不会创建连接对象,也无法在任务中修改。
切换用户(也就是在任务之间重新创建连接对象)并与我刚刚创建的用户一起运行以下任务的好方法是什么?
我可能不会以正确的方式进行(我正在从 Fabric 1 迁移,其中 env 值的切换就足够了)。以下是我知道的一些策略,它们中的大多数消除了我们一直依赖的一些灵活性。
- 创建一个已完成所有准备工作的自定义 AMI。
- 在回退到 Fabric CLI 提供的连接对象之前,在任务中为用户设置创建一个本地连接对象。
- 将 AWS 与 Ansible 更深入地集成(问题是我们的用户可能在实例处于活动状态后使用 Ansible 但没有 AWS 权限)。
我想这个列表还包括一个最佳实践问题。
解决方案
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)
推荐阅读
- npm - NPM 运行开始/本地主机未加载并使我的计算机非常慢
- json - 有没有办法根据spring boot中的条件从JSON响应内容的JSON数组的匹配数组元素中省略某些字段
- r - 通过 R 中的函数聚合在箱线图中添加描述性统计结果
- homebrew - 如何更改安装 Homebrew 的 repo?
- mysql - mysqldump 期望哪个用户名和密码?
- python - 如何使用 OpenCV python 计算距离?
- javascript - 如何在不触发重新布局的情况下有效地为 SVG 元素设置动画
- flutter - 检查音频是否已经加载
- java - 如果字符串与正则表达式不完全匹配,我如何忽略字符串?
- spring - 我们可以计算用户在 Spring MVC 应用程序中上传文件时的校验和吗?