【问题标题】:Provision server from the ground up in Ansible在 Ansible 中从头开始配置服务器
【发布时间】:2016-04-18 03:45:27
【问题描述】:

我需要使用 Ansible 配置一个非常新的 Ubuntu 服务器。一开始它只有root 用户和生成的密码。我需要做的第一个操作是创建一个service 用户,为其设置密码,或者上传我的本地用户的密钥(这样我就可以在没有密码的情况下登录)并禁用root 登录。然后我需要以service 用户的身份运行角色。我怎样才能在一本剧本中做到这一点(例如,signle ansible-playbook provision.yml 而不是 ansible-playbook init.yml && ansible-playbook apply_roles.yml)?问题是我需要在创建service 之后在某个地方切换用户,然后(以及所有未来的登录)我需要以他的身份登录。

将此主机的ansible_user 配置为service 并且只覆盖一次(到root)以进行初始设置是否是个好主意?有什么最佳做法吗?

【问题讨论】:

    标签: ansible ansible-playbook ansible-2.x


    【解决方案1】:

    如果没记错的话,Ubuntu 实例会从生成的 root 用户和本地用户 with access to sudo 开始:

    我认为最干净的方法是首先通过 bash 脚本安装该本地用户的密钥,通过:

    ssh-copy-id <server>
    

    (如果该命令可从您运行 ansible 的命令行获得)

    然后在 bash 脚本中的该行之后继续运行您的 Ansible 脚本。

    (虽然我认为也可以将本地用户的凭据存储在ansible vault 中。我还没有使用保险库,所以我不太熟悉它。)

    如您所说,我将在启动文件(如 become_user )或通过清单中的 ansible_user 指定服务用户。 (但根据this older issue,您可能会遇到问题。)

    如果我使用启动文件来指定用户,则该文件将具有一个角色(比如说 web-server ),并且该角色将有一个 dependency (比如说 common )。

    在普通角色中,我将有一个任务尝试使用服务用户(设置为 ignore errors)执行具有已知结果的命令。如果该任务未返回预期结果,我将创建服务用户并将该服务用户的密钥复制到服务器。涉及的每个任务都需要将 become_user 覆盖为本地用户。

    在执行该角色依赖后,主要角色将跟随,所有剩余任务应作为服务用户执行。

    【讨论】:

      【解决方案2】:

      您可以在一个剧本中进行多个剧本。为您希望以 root 身份运行的任务创建一个 play,为应该作为服务运行的角色创建另一个:

      - hosts: all
        remote_user: root
        tasks:
        # your tasks here
      
      - hosts: all
        remote_user: service
        roles:
        - your_role
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-04
        • 2018-12-21
        • 2018-11-16
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        相关资源
        最近更新 更多