Ansible更新用户密码

时间:2016-06-15 07:05:11

标签: ansible

ansible 192.168.1.115 -s -m shell -a "echo -e 'oldpassword\nnewpassword\nnewpassword' | passwd myuser" -u myuser --ask-sudo-pass

我想用新密码更新现有用户,我试过这个命令,但它没有用

欣赏任何提示!

3 个答案:

答案 0 :(得分:4)

您可以利用user模块快速更改所需帐户的密码。 Ansible不允许您将明文密码传递给用户模块,因此您必须安装密码散列库以供Python使用。

安装库:

sudo -H pip install passlib

然后简单地执行你的命令:

ansible 192.168.1.115 -s -m user -a "name=root update_password=always password={{ yourpassword | password_hash('sha512') }}" -u myuser --ask-sudo-pass

希望能帮到你

答案 1 :(得分:2)

使用

创建影子密码(linux)
python -c 'import crypt; print crypt.crypt("YourPassword", "$6$random_salt")'

创建 update_pass.yml

用sudoer(bash)执行你的ansible-playbook

ansible-playbook update_pass.yml --become --become-method='sudo' --ask-become-pass

答案 2 :(得分:1)

使用动态变量更新主机列表的密码:

在库存文件中,将变量(传递)设置为以下内容:

 ip_1@ ansible_user=xxxxxx ansible_ssh_pass=xxxx ansible_sudo_pass=xxx pass='aaaa'
 ip_2@ ansible_user=xxxxxx ansible_ssh_pass=xxxx ansible_sudo_pass=xxx pass='bbbb'

现在在剧本中,我们对影子文件进行了备份,并设置了cron任务以恢复影子文件,以防万一出了问题,然后我们更新了密码:

- hosts: your_hosts
  gather_facts: no
  tasks:
    - name: backup shadow file
      copy:
        src: /etc/shadow
        dest: /etc/shadaw.org
      become: yes

    - name: set cron for backup
      cron:
        name: restore shadow
        hour: 'AT LEAST GIVE YOURSELF ONE HOUR TO BE ABLE TO CALL THIS OFF'
        minute: *
        job: "yes | cp /tmp/shadow /etc/"
      become: yes

    - name: generate hash pass
      delegate_to: localhost
      command:  python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt('{{pass}}')"
      register: hash


    - debug:
        var: hash.stdout

    - name: update password
      user:
        name: xxxxxx
        password:  '{{hash.stdout}}'
      become: yes

现在,我们创建一个新的剧本来取消cron任务,我们将使用新密码进行身份验证,如果身份验证失败,cron将保持活动状态并恢复旧密码。

主机文件:

   ip_1@   ansible_user=xxxxxx ansible_ssh_pass=aaaa ansible_sudo_pass=aaaa
   ip_2@   ansible_user=xxxxxx ansible_ssh_pass=bbbb ansible_sudo_pass=bbbb

剧本:

- hosts: your_hosts
  gather_facts: no
  tasks:

    - name: cancel cron task
      cron:
        name: restore shadow
        state: absent

!!记住:

  • pass 变量包含您的密码,因此您可以考虑使用保管库。
  • 在设置备份cron以便调用(第二本剧本)时给您时间。
  • 在最坏的情况下,cron将恢复原始密码。
  • 您需要在ansible服务器中安装passlib。