作为一种常见的安全习惯,我了解到您不应该允许在通向世界的机器上通过ssh进行root登录。要走的路是使用用户帐户ssh到您的服务器,然后使用sudo。此外,默认情况下,Ubuntu禁用ssh-ing作为root帐户。
当我手动配置服务器时,我通常会执行sudo -i
以拥有持久的root shell,这样我就不必在每个命令前面键入sudo
。
现在我不完全确定使用Ansible做到最好的方法是什么。在Ansible的库存文件中,您可以使用ansible_ssh_user
变量指定用于ssh的用户。在Ansible剧本和任务中,您有以下选择:
yes
,则使用sudo 所以我用ansible_ssh_user
指定了用于ssh-ing的用户,然后我有几个需要root权限的任务。
我有两个选项可以做到这一点,但我真的不喜欢它们:
我可以对需要root权限的每个任务使用sudo: yes
。
我真的不喜欢这种方式,因为几乎每项任务都必须使用它。
我可以将sudo: yes
放在包含角色/任务的剧本中。
我怀疑这是否应该是正确的方法,因为像这样,所有角色/任务都应该假设它们始终具有root权限。另外,如果我们这样做的话,为什么我不能将它设置为Ansible配置中的一个选项,这样我的所有剧本(以及它的角色/任务)都将始终使用sudo?
所以我想知道,这样做的正确方法是什么?
答案 0 :(得分:2)
其他人可能有更好的建议,但我也会选择 2 。我想要在顶层运行的每个剧本通常都以这个样板开头:
---
-
hosts: all
gather_facts: no
sudo: yes
我的想法是,如果你想要可重复使用的任务,也许还有剧本,你可能最好不指定sudo
并允许最终用户在他们自己的设置中做出决定。< / p>
对于现实世界来说,在每个角色或每个服务器的基础上做出sudo / root决策似乎是最准确的,因为服务器配置最终决定了哪个方法实际上可以在服务器上运行。 AFAIK ansible不鼓励/支持这一点,但也许另一个答案将指向更好的方式。
答案 1 :(得分:2)
sudo: yes
,在新版本中使用become: yes
Example:
---
- hosts: all
become: yes
gather_facts: yes
roles:
- common
希望这会对你有所帮助。感谢