首页 > 解决方案 > 如何通过ansible重置root密码

问题描述

我们有需要由 ansible 重置 root passwd 的服务器。

我运行下面的命令来获取哈希密码并输入我们正确的根密码:

python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
Password:
Confirm:
$6$c/98MRPOs7JQ.pbw$XI7Qyz80d5ZV2DcgMk8limxB9DoTNsTCIZVYtLRTkM3a5T6NnHOgxEoRq/te4jIJhm114HuTXLv0dMf5H

然后,我在我的剧本中添加了生成的 root 密码:

  tasks:
    - name: Change user password
      user: name=root update_password=always password=$6$c/98MRPOs7JQ.pbw$XI7Qyz80d5ZV2DcgMk8limxB9DoTNsTCIZVYtLRTkM3a5T6NnHOgxEoRq/te4jIJhm114HuTXLv0dMf5H

没有错误地运行该剧本,然后尝试在服务器上使用该实际(未哈希加密的)root密码登录,但它不起作用,我做错了什么以及如何解决?

标签: ansible

解决方案


您的哈希可能不正确。也许使用了不兼容的散列算法。
多种方法可以生成该哈希

可靠的方式:
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"

mkpasswd:_
mkpasswd --method=sha-512

或者使用python:
python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
您需要先安装passlib


推荐阅读