![使用 ansible 进行密码验证和不同的用户名](https://linux22.com/image/725907/%E4%BD%BF%E7%94%A8%20ansible%20%E8%BF%9B%E8%A1%8C%E5%AF%86%E7%A0%81%E9%AA%8C%E8%AF%81%E5%92%8C%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E6%88%B7%E5%90%8D.png)
我们维护多个数据库服务器,这些服务器有两个管理员帐户之一,并使用密码验证。假设这两个帐户分别是“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
在以管理员用户身份运行的任务上进行设置。
这样,谁主持了这场演出就一目了然了,而且你不必更改共享凭据。