从 Ansible 行动手册创建用户密码



我相信这里有人可以解决我的问题。我正在我的 Ansible 主机文件中定义的主机上创建用户。但是当用户希望登录时,root 用户需要定义用户密码。我需要自动创建用户密码。

要使用 playbook 创建用户密码,我们无法以明文形式指定密码,我们只能通过提供哈希来执行此操作:

- name: Add Users + Assign to Group
user:
name: "{{ item }}"
password: $6$ul4TACYvHI.kmGUK$j32lU8fNbX.eW0DZOqnnDlP8i0...

要创建哈希,第一步是通过以 root 身份登录目标服务器来定义密码,然后使用 python-crypt 创建哈希。运行命令后,终端将提供哈希,我将其粘贴到剧本中。 (在下面的示例中,密码为"ansible"(

python -c 'import crypt; print crypt.crypt("ansible")'

当我对目标服务器运行剧本时,我可以以剧本使用我使用 python-crypt 定义的密码创建的用户身份登录(在本例中,我以用户 user2 身份登录,密码为"ansible"(

login as: user2
user1@10.65.8.50's password: "ansible"

[user1@hostname ~]$

这意味着我必须在创建用户的服务器的终端中创建哈希,然后将该哈希复制并粘贴到剧本中。如果我有一台服务器,不会太麻烦,但是如果我针对 100 台服务器运行剧本,那么我需要以 root 身份登录 100 台服务器并创建 100 个哈希,然后在剧本中定义所有这些哈希,这不是很自动化!

因此,我们需要的是能够从剧本中执行python-crypt,grep创建的哈希,然后将其放入剧本中。你对如何做到这一点有什么想法吗?甚至不是专门在 Ansible 中,我不希望你们为我编写剧本。也许可以考虑如何在您选择的工具中执行此操作,例如PowerShell。 一旦我了解了这个过程,我就可以把它翻译成剧本。

任何帮助都非常感谢!

这是一个遥远的答案,我还没有测试过这个,但我一直在考虑一种以自动化方式使用ansible-vault的方法,这样我就可以部署应用程序而无需事先定义密码,同时在创建密码后保留密码的加密记录。

下面的行动手册显示了您可能采取的一种方法:

  • 在远程主机上生成密码,
  • 在远程主机上使用该密码,
  • 在本地(控制(系统上存储该密码的加密副本。

同样,这是未经测试的,并且可能由于我没有预料到的某种原因而无法工作,但我实际上认为它应该能够像这样工作(仅显示相关任务(:

安斯布尔.cfg

vault_password_file = /path/to/vault_password_file

剧本.yml

---
- hosts: example_com
gather_facts: true
become: true
vars:
password_var_name: "example_com_db_password"
vault_vars_file: "example_com_vault.yml"
tasks:
- name: Find out if we have already set a password.
command: "grep "'password' => ''," settings.php"
args:
chdir: "/path/to/settings"
register: password_in_file
- name: Create a password and use ansible-vault to write it.
block:
- name: Create a new password.
command: "apg -a1 -m32 -n1"
register: new_vault_password
no_log: true
- name: Encrypt the new password.
command: "ansible-vault encrypt "{{ new_vault_password.stdout }}""
register: new_vault_password_encrypted
no_log: true
- name: Write the encrypted password to our local ansible-vault file.
lineinfile:
path: "{{ playbook_dir }}/{{ vault_file }}"
line: "{{ password_var_name }}: {{ new_vault_password_encrypted.stdout }}"
insertafter: "EOF"
when: password_in_file.stdout = 0
delegate_to: localhost
- name: Write the unencrypted password into our remote settings file.
lineinfile:
path: "/path/to/settings/settings.php"
line: "  'password' => '{{ new_password.stdout }}',"
regexp: "^  'password' => '',$"
no_log: true

所以这方面的内容是:

  • 我们有一个 Ansible 配置文件ansible.cfg.
  • 该文件包含我们的ansible-vault密码文件的路径。
  • 我们有一个用于动态 Ansible 变量的本地未加密文件。
  • 我们检查是否需要继续创建新密码等。
  • 如果是这样,我们会创建一个密码。
  • 然后我们加密它。
  • 然后我们将未加密的密码写入设置文件。
  • 然后我们将加密的密码写入本地加密的变量文件。

在 FAP 等变量中设置密码,将其添加到脚本中以创建用户:

- name: "Encrypt password for target system"
command: "python -c 'import crypt; print crypt.crypt("{{ FAP }}")'"
register: EFAP
- name: "Add user USER1"
user: name="USER1" state="present" password="{{ EFAP.stdout }}"

我已经使用复杂的密码对此进行了测试,并且工作正常

相关内容

  • 没有找到相关文章

最新更新