1

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

ansible_user将此主机配置为service并且仅覆盖一次 (to root) 以进行初始设置是一个好主意吗?有什么最佳实践吗?

4

2 回答 2

1

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

- hosts: all
  remote_user: root
  tasks:
  # your tasks here

- hosts: all
  remote_user: service
  roles:
  - your_role
于 2016-04-16T20:19:07.107 回答
1

如果没记错的话,Ubuntu 实例会从生成的 root 用户和有权访问 sudo的本地用户开始:

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

ssh-copy-id <server>

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

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

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

正如您所说,我将在启动文件(作为become_user)或通过清单中的 ansible_user 指定服务用户。(但是根据这个较早的问题,您可能会遇到这样做的问题。)

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

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

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

于 2016-04-17T19:45:27.957 回答