当前位置: 首页 > 知识库问答 >
问题:

从一个可移动的剧本中创建用户密码

夹谷硕
2023-03-14

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

要使用playbook创建用户密码,我们不能以明文形式指定密码,只能通过提供哈希值来实现:

 - name: Add Users + Assign to Group
   user:
      name: "{{ item }}"
      password: $6$ul4TACYvHI.kmGUK$j32lU8fNbX.eW0DZOqnnDlP8i0...
python -c 'import crypt; print crypt.crypt("ansible")'
login as: user2

user1@10.65.8.50's password: "ansible"


[user1@hostname ~]$

非常感谢任何帮助!

共有1个答案

洪楚
2023-03-14

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

下面的剧本给出了一个你可以使用的方法:

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

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

vault_password_file = /path/to/vault_password_file
---
- 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

因此tldr为:

  • 我们有一个可移动的配置文件Ansible.cfg
  • 该文件包含安全存储库密码文件的路径。
  • 我们有一个动态可移动变量的本地未加密文件。
  • 我们检查是否需要继续创建新密码等
  • 如果是,则创建密码。
  • 然后加密它。
  • 然后将未加密的密码写入设置文件。
  • 然后将加密的密码写入本地未加密的变量文件。
 类似资料:
  • 我正在尝试使用jmeter模拟在我的测试站点上创建的500个用户名/密码。主页有3个字段,用户名、电子邮件地址和密码。如何让jmeter自动填充这些字段?下一个问题是,jmeter是否可以转到下一页,例如填写信用信息?

  • 我有一个Ansible playbook,它首先在google cloud上创建一个实例,然后将新实例加载到一个组中。然后,它继续并尝试为该组运行一个角色,该角色将更新新的实例设置。我从谷歌云上的Ansible文档中获得了大部分代码。 我真正添加的是添加<code>vars_prompt)和一个用于软件座位数的变量。 在我的剧本中,我使用<code>vars_prompt<code>来收集一些用户

  • 依照国际惯例,我们还将用Ionic 2继续创建hello,world。 hello,world 开始之前我们需要先安装Ionic的命令行工具,后面我们需要用这个工具来创建工程。 npm install -g ionic@beta 如果没有意外,我们将安装成功,然后可以使用ionic命令: 它自带了一系列的工具来加速我们的开发,这些工具可以在后面的章节中学习到。 Available tasks: (

  • 本文向大家介绍Markdown 创建剧透,包括了Markdown 创建剧透的使用技巧和注意事项,需要的朋友参考一下 示例 扰流板用于隐藏可能会对其他用户的体验造成负面影响的文本或图像。可以使用创建>! 这将一直隐藏,直到光标悬停在其上方 注意:这不是标准标记规范的一部分,并且不会在所有的标记解析器中呈现。

  • 在Firebase中,我可以使用电子邮件、电话号码等创建一个帐户。但是,只使用ID和密码创建帐户是不可能的。有什么方法可以做到吗? 我尝试做的是: 允许用户使用电子邮件创建帐户- 这种方式的缺点:很难(或者可能不可能)设置Firest的规则。所以,我认为一些黑客可以读取或更改数据。 缺点:就我而言,我无法设置数据库的规则,所以我担心黑客会更改ID和密码等数据

  • 问题内容: 我想创建一个将包含变量的脚本,并且 仅 当尚不存在这种登录名 时才在Postgres数据库中创建用户。我以为这会起作用,但是我不能说出问题所在: __ 如何强制用变量内容替换变量? 而且和之间有什么区别? 问题答案: 要参数化标识符或语法元素,通常需要将动态SQL与-最好结合使用,以易于使用。 但实用的命令(包括所有SQL DDL语句)不允许值或参数替换的传递 在所有 。您需要先连接完