我需要使用Ansible配置一个非常新鲜的Ubuntu服务器。一开始它只有root
用户和生成的密码。我需要做的第一个操作是创建一个service
用户,为其设置密码,可选地,上传我本地用户的密钥(这样我就可以在没有密码的情况下登录)并禁用root
登录。然后我需要以service
用户身份运行角色。如何在一个剧本中完成此操作(例如,单击ansible-playbook provision.yml
而不是ansible-playbook init.yml && ansible-playbook apply_roles.yml
)?问题是我需要在创建service
之后将用户切换到某个位置然后(以及所有将来的登录)我需要以他身份登录。
将此主机的ansible_user
配置为service
并且仅覆盖一次(至root
)以进行初始设置是一个好主意吗?任何最佳做法?
答案 0 :(得分:1)
您可以在一个剧本中拥有多个剧本。为您希望以root身份运行的任务创建一个游戏,为另一个应作为服务运行的角色创建一个游戏:
- hosts: all
remote_user: root
tasks:
# your tasks here
- hosts: all
remote_user: service
roles:
- your_role
答案 1 :(得分: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服务器),并且该角色将具有dependency(让我们说常见)。
在常见角色中,我将尝试使用服务用户(设置为ignore errors)尝试具有已知结果的命令。如果该任务未返回预期结果,则我将创建服务用户并将该服务用户的密钥复制到服务器。涉及的每个任务都需要将become_user覆盖到本地用户。
执行该角色依赖后,主要角色将跟随,所有剩余的任务应作为服务用户执行。