Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 易读密码\u散列不会&\x27;即使安装了passlib,也要使用bcrypt_Python_Ansible_Bcrypt - Fatal编程技术网

Python 易读密码\u散列不会&\x27;即使安装了passlib,也要使用bcrypt

Python 易读密码\u散列不会&\x27;即使安装了passlib,也要使用bcrypt,python,ansible,bcrypt,Python,Ansible,Bcrypt,我正试图调用Ansible的password\u hash函数 {{ admin_password | password_hash('bcrypt') }} 我尝试了十几种方法来告诉Ansible passlib和Python2.7在哪里,但不管怎样,我一直在得到结果 "AnsibleFilterError: crypt.crypt does not support 'bcrypt' algorithm" 据我所见,ansible过去只使用crypt,但较新的版本(我目前使用的是2.7.9)

我正试图调用Ansible的
password\u hash
函数

{{ admin_password | password_hash('bcrypt') }}
我尝试了十几种方法来告诉Ansible passlib和Python2.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时不包含bcrypt,所以为了以防万一,我两个都做了。没有快乐

我应该补充一点,我在AmazonLinux2上的AWS中,我已经启用了EPELRepo,等等


编辑:我尝试了一些来自评论的建议(使用passlib 1.6,验证bcrypt是否与python一起工作),虽然我可以验证在python内测试时passlib是否工作,但我仍然从Ansible
AnsibleFilterError:crypt.crypt不支持“bcrypt”算法


我发现的唯一与此相关的东西是:但它描述了默认设置,即查找passlib,只有在crypt.crypt不存在时才回退。那么,为什么python在我手动运行它时会看到passlib,而不是从playbook中看到它呢?

首先,验证Ansible是否使用了您认为的python。看看
head-1$(这是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
>>> 
我使用的是Fedora28,所以我可以简单地
yum-y安装
python2密码库

确保
passlib
支持
bcrypt

>>> from passlib.hash import bcrypt
>>> bcrypt.hash('secret')
'$2b$12$3YUj4BgoJ8ba1H4XtH/p3.4DG0lMgaHQ4qYshpj/.COe1eHEU.71K'
>>> 
如果上述所有操作都成功,则应使用
密码\u哈希
过滤器 工作:


首先,验证Ansible是否正在使用您认为是的Python。看看
head-1$(这是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
>>> 
我使用的是Fedora28,所以我可以简单地
yum-y安装
python2密码库

确保
passlib
支持
bcrypt

>>> from passlib.hash import bcrypt
>>> bcrypt.hash('secret')
'$2b$12$3YUj4BgoJ8ba1H4XtH/p3.4DG0lMgaHQ4qYshpj/.COe1eHEU.71K'
>>> 
如果上述所有操作都成功,则应使用
密码\u哈希
过滤器 工作:


记录在案。Ubuntu的同样问题也通过安装“PythonPasslib”得到了解决。@VladimirBotka你的意思是代替了
Python2Passlib
?这不适用于较小版本的Python吗?你有我能读到的任何与你的意思相关的链接吗?在Ubuntu 18.04、ansible 2.7.9和python 2.7.15rc1中,报告的“AnsibleFilterError:crypt.crypt不支持'bcrypt'算法”。通过安装“PythonPasslib”解决了这个问题。没有python2 passlib。@VladimirBotka尝试删除passlib 1.7并强制安装“过时的”1.6,但没有区别。将其加入到剧本中,以防图片中没有1.7的新安装可能会带来不同,但不会带来乐趣。Ansible的错误与我在Amazon Linux 2下对“@”larsks.YMMV的评论中描述的相同。我的第一条评论“记录在案”的目的是通知Ubuntu用户谁找到了这个线程。我想你必须把这个问题带到一个合适的亚马逊Linux论坛上。记录在案。Ubuntu的同样问题也通过安装“PythonPasslib”得到了解决。@VladimirBotka你的意思是代替了
Python2Passlib
?这不适用于较小版本的Python吗?你有我能读到的任何与你的意思相关的链接吗?在Ubuntu 18.04、ansible 2.7.9和python 2.7.15rc1中,报告的“AnsibleFilterError:crypt.crypt不支持'bcrypt'算法”。通过安装“PythonPasslib”解决了这个问题。没有python2 passlib。@VladimirBotka尝试删除passlib 1.7并强制安装“过时的”1.6,但没有区别。将其加入到剧本中,以防图片中没有1.7的新安装可能会带来不同,但不会带来乐趣。Ansible的错误与我在Amazon Linux 2下对“@”larsks.YMMV的评论中描述的相同。我的第一条评论“记录在案”的目的是通知Ubuntu用户谁找到了这个线程。我想你必须把这个问题带到一个合适的亚马逊Linux论坛上。非常感谢详细的答案和调试手册,我会试一试。所以,在我测试ansible调试时,一切似乎都得到了验证,其中“msg”的值为空。从控制器运行完整的剧本时没有出现错误,但也没有输出。使用-vvv也没有额外的细节,看起来它使用的是正确的python。有什么想法吗?如果对
password\u hash
的调用在模板中,会有什么不同吗?这个调用可能是在控制器上而不是在主机上进行的吗?非常感谢详细的回答,调试手册将对此进行尝试。因此,在我测试ansible调试时,一切似乎都得到了验证,其中“msg”的值为空。从控制器运行完整的剧本时没有出现错误,但也没有输出。使用-vvv也没有额外的细节,看起来它使用的是正确的python。有什么想法吗?如果对
password\u hash
的调用在模板中,会有什么不同吗?是否可以在控制器而不是主机上进行调用?