使用 ansible 进行密码验证和不同的用户名

使用 ansible 进行密码验证和不同的用户名

我们维护多个数据库服务器,这些服务器有两个管理员帐户之一,并使用密码验证。假设这两个帐户分别是“db_admin”和“db_user”。每个用户名的所有示例的密码都相同,但两个用户名之间的密码不同 - 例如,用户名为 db_admin 的所有主机的密码为“password1”,用户名为 db_user 的所有主机的密码为“password2”。

我如何针对所有主机运行剧本(甚至是临时命令)。我可以在清单中设置 ansible_ssh_user,并在命令行上使用 -k,但这只会提示输入一次密码,因此对于一半的主机来说,这是错误的。当然,我可以重复 ansible 运行,每次指定不同的主机组,但我想一次性完成。

另外:请别介意,我更喜欢基于密钥的身份验证 - 目前这不是一个选项。我还想(当然使用 Ansible)编辑 /etc/{passwd,shadow,group} 并将用户名更改为所有主机上的相同用户名,但这是不可能的(并且可能会破坏其他依赖于“scp file db_user@host”而不是“scp db_admin@host”的东西)。第三,我想回到过去并首先防止分歧,但这些都不是选项。

答案1

在每个主机的 host_vars 或每个主机组的 group_vars 中定义用户和密码。

您需要定义适当的参数此处列出, IE:

ansible_user要使用的默认 ssh 用户名。

ansible_ssh_pass要使用的 ssh 密码。** 需要 sshpass

根据指导,您应该使用以下方式加密值Ansible Vault

答案2

为您自己或运行这些剧本的任何人创建一个个人的非特权用户。使用相同的凭据,例如针对目录配置身份验证,或部署 ssh 密钥。

安装 sudo 规则,以便该个人用户可以以 db_admin 或 db_user 身份运行命令。

become_user根据需要将 host_vars 或 inventory 设置为 db_admin 或 db_user。在ansible_user全局级别设置为您的个人用户(playbook vars 或 group_vars/all)。become: True在以管理员用户身份运行的任务上进行设置。

这样,谁主持了这场演出就一目了然了,而且你不必更改共享凭据。

相关内容