【发布时间】:2019-04-26 21:38:12
【问题描述】:
我正在尝试调用 Ansible 的 password_hash 函数...
{{ admin_password | password_hash('bcrypt') }}
我已经尝试了十几种方法来告诉 Ansible passlib 和 python 2.7 在哪里,但无论如何,我不断得到结果......
"AnsibleFilterError: crypt.crypt does not support 'bcrypt' algorithm"
据我所知,ansible 过去只使用crypt,但较新的版本(我目前在 2.7.9 上)使用passlib,据我所知,passlib 支持 bcrypt(这是有限的)。我已将以下内容添加到我的主机文件中...
ansible_python_interpreter = /usr/bin/python2.7
我正在像这样安装 PIP 和 Passlib...
- name: Install PY stuff...
yum:
name: ['python2-pip','python2-passlib']
state: present
- name: Ensure bcrypt support is installed for python passlib
pip:
name: "passlib[bcrypt]"
executable: pip-2.7
我本来希望 yum 调用可以正确设置 passlib,但它不起作用,所以我尝试只通过 PIP 进行操作,它也不起作用,所以我尝试了上面的方法,但仍然没有在职的。我不确定 passlib 在通过 yum 安装时是否包含 bcrypt,因为它似乎只使用 PIP 时没有,所以为了以防万一,我两者都做了。不开心。
我应该补充一点,我在 Amazon Linux 2 上的 AWS 中,并且我已经启用了 epel 存储库等。
编辑:我已经尝试了 cmets 的一些建议(使用 passlib 1.6,验证 bcrypt 是否适用于 python),虽然我可以验证 passlib 在 python 中测试时确实有效,但我继续得到相同的答案Ansible AnsibleFilterError: crypt.crypt does not support 'bcrypt' algorithm
我发现与此相关的唯一内容是:https://github.com/ansible/ansible/issues/17266,但它描述了默认查找 passlib 并且仅在 crypt.crypt 不存在时回退。那么为什么 python 在我手动运行时会看到 passlib,而不是从 playbook 中呢?
【问题讨论】:
-
记录在案。安装“python-passlib”解决了与 Ubuntu 完全相同的问题。
-
@VladimirBotka 你的意思是不是
python2-passlib?这不是针对较小版本的 Python 吗?你有任何我能读到的与你的意思相关的链接吗? -
在 Ubuntu 18.04、ansible 2.7.9 和 python 2.7.15rc1 中,test playbook 报告了 “AnsibleFilterError: crypt.crypt 不支持 'bcrypt' 算法”。通过安装“python-passlib”解决了这个问题。没有 python2-passlib。
-
@VladimirBotka 尝试删除 passlib 1.7 并强制安装“过时的”1.6,但没有区别。将其放入剧本中,以防万一在图片中没有 1.7 的全新安装可能会有所作为,但没有乐趣。来自 Ansible 的相同错误,并且与我在下面的 '@'larsks 的 cmets 中描述的结果相同。
-
YMMV 与 Amazon Linux 2。我的第一条评论“供记录”的目的是通知找到此线程的 Ubuntu 用户。我认为您必须将问题提交给适当的 Amazon Linux 论坛。