即使安装了passlib,Ansible password_hash也不会使用bcrypt

时间:2019-04-26 21:38:13

标签: python ansible bcrypt

我正试图以此方式调用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进行操作,也没有用,所以我尝试了上述方法,但仍然不可行工作。我不确定通过yum安装时passlib是否包含bcrypt,因为似乎仅使用PIP时并没有包含bcrypt,以防万一,我做到了。不高兴。

我应该补充说我在Amazon Linux 2上的AWS中,并且已经启用了epel存储库等。


编辑:我已经尝试了注释中的一些建议(使用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。那么为什么当我手动运行passlib而不是从剧本中看到python时,为什么会看到passlib?

1 个答案:

答案 0 :(得分:0)

首先,验证Ansible是否正在使用您认为的Python。查看head -1 $(which ansible),您应该看到类似以下内容的

#!/usr/bin/python2

确保已安装passlib,Python可以在其中找到它:

$ /usr/bin/python2
Python 2.7.15 (default, Oct 15 2018, 15:24:06) 
[GCC 8.1.1 20180712 (Red Hat 8.1.1-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import passlib
>>> 

我正在使用Fedora 28,因此我可以简单地yum -y install python2-passlib

确保passlib支持bcrypt

>>> from passlib.hash import bcrypt
>>> bcrypt.hash('secret')
'$2b$12$3YUj4BgoJ8ba1H4XtH/p3.4DG0lMgaHQ4qYshpj/.COe1eHEU.71K'
>>> 

如果以上所有方法均成功,则password_hash过滤器应 工作:

$ cat playbook.yml
---
- hosts: localhost
  gather_facts: false
  tasks:
    - debug:
        msg: "{{ 'secret' | password_hash('bcrypt') }}"

$ ansible-playbook playbook.yml 
PLAY [localhost] ********************************************************************

TASK [debug] ************************************************************************
ok: [localhost] => {
    "msg": "$2b$12$H9rnvJwYtSoy05WHMYuJR.Kaz9kxLJleT7XUsIauWwd3Mdk0H/Kl6"
}

PLAY RECAP **************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0