ansible 192.168.1.115 -s -m shell -a "echo -e 'oldpassword\nnewpassword\nnewpassword' | passwd myuser" -u myuser --ask-sudo-pass
我想用新密码更新现有用户,我试过这个命令,但它没有用
欣赏任何提示!
答案 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")'
用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
!!记住: