是否使用root帐户配置Ansible服务器?

时间:2014-05-27 15:48:11

标签: ubuntu ssh root ansible

作为一种常见的安全习惯,我了解到您不应该允许在通向世界的机器上通过ssh进行root登录。要走的路是使用用户帐户ssh到您的服务器,然后使用sudo。此外,默认情况下,Ubuntu禁用ssh-ing作为root帐户。

当我手动配置服务器时,我通常会执行sudo -i以拥有持久的root shell,这样我就不必在每个命令前面键入sudo

现在我不完全确定使用Ansible做到最好的方法是什么。在Ansible的库存文件中,您可以使用ansible_ssh_user变量指定用于ssh的用户。在Ansible剧本和任务中,您有以下选择:

  • remote_user - 用于使用特定的playbook / task
  • ssh到计算机的用户
  • sudo - 如果yes,则使用sudo
  • 运行playbook / task中的命令
  • sudo_user - Sudo到其他用户,然后执行playbook / task
  • 中的命令

所以我用ansible_ssh_user指定了用于ssh-ing的用户,然后我有几个需要root权限的任务。

我有两个选项可以做到这一点,但我真的不喜欢它们:

  1. 我可以对需要root权限的每个任务使用sudo: yes

    我真的不喜欢这种方式,因为几乎每项任务都必须使用它。

  2. 我可以将sudo: yes放在包含角色/任务的剧本中。

    我怀疑这是否应该是正确的方法,因为像这样,所有角色/任务都应该假设它们始终具有root权限。另外,如果我们这样做的话,为什么我不能将它设置为Ansible配置中的一个选项,这样我的所有剧本(以及它的角色/任务)都将始终使用sudo?

  3. 所以我想知道,这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

其他人可能有更好的建议,但我也会选择 2 。我想要在顶层运行的每个剧本通常都以这个样板开头:

---
-
  hosts: all
  gather_facts: no
  sudo: yes

我的想法是,如果你想要可重复使用的任务,也许还有剧本,你可能最好不指定sudo并允许最终用户在他们自己的设置中做出决定。< / p>

对于现实世界来说,在每个角色或每个服务器的基础上做出sudo / root决策似乎是最准确的,因为服务器配置最终决定了哪个方法实际上可以在服务器上运行。 AFAIK ansible不鼓励/支持这一点,但也许另一个答案将指向更好的方式。

答案 1 :(得分:2)

新版Ansible中不推荐使用

sudo: yes,在新版本中使用become: yes

Example:
  ---
   - hosts: all
     become: yes
     gather_facts: yes
     roles:
       - common

希望这会对你有所帮助。感谢