ansible - 如何通过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 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
。
推荐阅读
- python - 如何使用 sensu-go-python 列出 sensu 中的事件?
- java - 如何在 Spring 中解析嵌套的 json
- openstreetmap - 合并来自 Geofrabik 的多个 PBF 文件以在 Nominatim 中使用
- jquery - 如何在赛普拉斯中选择一个数组?
- javascript - 如何删除循环元素的父 div?
- rust - Tokio spawn,移动对自身的引用
- c# - 如何根据比较分组 ID 使列唯一
- jenkins - 如何将 Jenkinsfile 配置为仅在运行日常 cron 作业时运行特定阶段?
- javascript - 如何给一个确认()两个单独的执行命令
- javascript - (未捕获的类型错误:无法设置未定义的属性“显示”