fel*_*lix 20 cryptography pycrypto ansible
该文件是指我们GitHub的例子,但是这是一个有点稀疏而神秘.
它说:
# created with:
# crypt.crypt('This is my Password', '$1$SomeSalt')
password: $1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI.
Run Code Online (Sandbox Code Playgroud)
但crypt.crypt不会发出示例所示的内容.它还使用MD5.
我试过这个:
# python
import crypt
crypt.crypt('This is my Password', '$6$somereallyniceandbigrandomsalt$')
>> '$69LxCegsnIwI'
Run Code Online (Sandbox Code Playgroud)
但是用户的密码字段应该是这样的:
password: $6$somereallyniceandbigrandomsalt$UqddPX3r4kH3UL5jq5/ZI.
Run Code Online (Sandbox Code Playgroud)
其中包括三个$分隔符6(分隔它表示SHA-512哈希),盐和加密密码.
请注意,python crypt文档没有提及有关$ N格式的任何内容.
问题:
供应的盐是否crypt.crypt应该以尾随$结尾或以$ N $ SALT格式结束?
Python文档是指DES,但是如何调用SHA-512或MD5以及它的文档在哪里?
我是否真的应该拿出输出crypt.crypt并切断前6 美元并使$ N $ SALT $ CRYPTED?这是ansible需要的吗?
fel*_*lix 32
文档中显示的python示例取决于您正在使用的操作系统上运行的crypt版本.
我在OS X上生成了crypt,我目标的服务器是ubuntu.
由于OS提供的crypt实现的差异,结果是不同的和不兼容的.
请改用:
http://pythonhosted.org/passlib/
Passlib是Python 2和3的密码散列库,它提供了超过30种密码散列算法的跨平台实现,以及管理现有密码哈希的框架.它设计用于广泛的任务,从验证/ etc/shadow中的哈希值到为多用户应用程序提供全强度密码哈希.
>>> # import the hash algorithm
>>> from passlib.hash import sha512_crypt
>>> # generate new salt, and hash a password
>>> hash = sha512_crypt.encrypt("password")
>>> hash
Run Code Online (Sandbox Code Playgroud)
'$ 6 $轮= 656000 $ $ BthPsosdEpqOM7Qd升/ ln9nyEfxM67ea8Bvb79JoW50pGjf6iM87taIvfSmpjasE4/wBG1.60pFS6W992T7Q1q2wikMbxYUvMHD1tT1'
小智 6
这对我有用(使用 python 2.7.4):
python
>>> import crypt
>>> crypt.crypt('thisismypassword', '$6$Som3S@lt$')
'$6$Som3S@lt$XGoe9ONI00NaTkYn46CLDr8TSkvkovahinFqy95vrSe5Hzx2999C9mgF76ODFRnXMJHUCWFHLdkYd3c7AB9WV.'
Run Code Online (Sandbox Code Playgroud)
我有一个 vars.yml ,如下所示:
---
password: $6$Som3S@lt$XGoe9ONI00NaTkYn46CLDr8TSkvkovahinFqy95vrSe5Hzx2999C9mgF76ODFRnXMJHUCWFHLdkYd3c7AB9WV.
Run Code Online (Sandbox Code Playgroud)
和一个像这样的 playbook.yml :
---
- hosts: vagrant
vars_files:
- vars.yml
user: vagrant
tasks:
- name: create artefactual user
user: name=artefactual state=present password={{password}} shell=/bin/bash
Run Code Online (Sandbox Code Playgroud)
我使用 vagrant 运行我的剧本vagrant up,然后从另一个控制台我可以使用 ansible 创建的人工用户和密码 ssh 到新创建的虚拟机thisismypassword。
我只是将 crypt.crypt 的输出复制到名为“password”的 ansible 变量中并使用它。您在问题中显示的 crypt 的输出看起来太短,我不确定您为什么会得到这个,也许是不同版本的 python?
这已在Ansible 文档中更新。有两种首选方式:
如何为用户模块生成加密密码?
大多数 Linux 系统上可用的 mkpasswd 实用程序是一个不错的选择:
mkpasswd --method=SHA-512如果您的系统上未安装此实用程序(例如,您使用的是 OS X),那么您仍然可以使用 Python 轻松生成这些密码。首先,确保安装了 Passlib 密码哈希库。
pip install passlib库准备就绪后,可以按如下方式生成 SHA512 密码值:
python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"