该文件是指我们GitHub的例子 ,但是这是一个有点稀疏而神秘。
它这样说:
# created with:
# crypt.crypt('This is my Password', '$1$SomeSalt')
password: $1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI.
但crypt.crypt
不发出什么例子显示。 它还使用MD5。
我尝试这样做:
# python
import crypt
crypt.crypt('This is my Password', '$6$somereallyniceandbigrandomsalt$')
>> '$69LxCegsnIwI'
但用户的密码字段应该得到的东西是这样的:
password: $6$somereallyniceandbigrandomsalt$UqddPX3r4kH3UL5jq5/ZI.
它包括三个$定界符分开6
(这表示它的一个SHA-512哈希值)时,盐,和加密的密码。
需要注意的是蟒蛇隐窝文档没有提及关于$ N格式什么。
问题:
是盐,如提供给crypt.crypt
,应该用一个尾随$结束或者是在$ N $ SALT格式?
Python文档是指DES,但如何SHA-512或MD5被调用,哪里是机制的文档的呢?
我真的应该采取的输出crypt.crypt
并切断第一$ 6及$做出N $ SALT $加密后 ? 这是ansible需求?
Answer 1:
在文档中显示的蟒蛇例如取决于什么版本的地穴是您正在使用的操作系统上运行。
我生成在OS X上隐窝,我是靶向服务器是Ubuntu Linux系统。
由于在实施隐窝是由OS提供的差异,其结果是不同的,不兼容。
使用这个来代替:
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
'$ 6 $轮= 656000 $ $ BthPsosdEpqOM7Qd升/ ln9nyEfxM67ea8Bvb79JoW50pGjf6iM87taIvfSmpjasE4 / wBG1.60pFS6W992T7Q1q2wikMbxYUvMHD1tT1'
Answer 2:
这为我工作(使用Python 2.7.4):
python
>>> import crypt
>>> crypt.crypt('thisismypassword', '$6$Som3S@lt$')
'$6$Som3S@lt$XGoe9ONI00NaTkYn46CLDr8TSkvkovahinFqy95vrSe5Hzx2999C9mgF76ODFRnXMJHUCWFHLdkYd3c7AB9WV.'
我有一个vars.yml,看起来像这样:
---
password: $6$Som3S@lt$XGoe9ONI00NaTkYn46CLDr8TSkvkovahinFqy95vrSe5Hzx2999C9mgF76ODFRnXMJHUCWFHLdkYd3c7AB9WV.
而像这样的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
我使用的流浪汉,经营我的剧本vagrant up
,然后从另一个控制台我可以ssh使用由ansible创建的假象用户,其密码新创建的VM thisismypassword
。
我只是复制crypt.crypt输出到ansible变量称为密码,并使用了。 地下室的,你在你的问题显示输出看起来太短了,我不知道为什么你得到了,也许是不同版本的Python?
Answer 3:
这在被更新Ansible文档 。 有两种方法首选:
如何为用户生成加密后模块密码?
该mkpasswd实用程序,可在大多数Linux系统是一个很好的选择:
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())"
Answer 4:
我把@ Felix的答案 ,并把它做成一个脚本,我可以包括在我工作的一个码头工人的项目。 我知道很多的开发人员使用的MacOS / OSX和没有mkpasswd
该平台上,所以我为他们节省了谷歌搜索。
我已经添加了以下选项:
- PROCESS_TIME(布尔)
- ROUNDS(整数)
- 覆盖default_rounds被调谐采取〜300ms的一个“平均”系统上的值。 你想要一个最低的100毫秒,而应该是一样大,你能负担得起。
#!/usr/bin/env python3
# Because OSX doesn't have mkpasswd...
# Based on https://stackoverflow.com/a/17992126/117471
# python3 -c "from passlib.hash import sha512_crypt; print(sha512_crypt.encrypt(input()))" <<< bruno # NOQA
# Usage:
#
# $ ./mkpasswd.py
# Password:
# $6$rounds=656000$pfFmQISGcjWHOCxW$rBptiSK.tqSPnUiq6KiSHzz6LvvW/x1SjkkWFwxWB9Dt75NLNBs0N3OyGV4K5ejjBs/u.o3jtigvUKbmmwVQP.
#
# $ PROCESS_TIME=1 ./mkpasswd.py
# Password:
# $6$rounds=656000$e0OGrad82DBrUo9T$ldqtOdN54gmXI6nb0D.Y5mm5ih.LIQm/Ep/bkNL76.3hE65FqXA9wyZ.M5YOrv6dSvwhPAktXGJ6LJT0Fgd4x.
# 656000 rounds in 1.008705 seconds of cpu time
#
# $ ROUNDS=1280000 PROCESS_TIME=1 ./mkpasswd.py <<< bruno
# $6$rounds=1280000$QO5FSyw5rQpiY6PI$0zRMJ4RzCbH61XxIdpsUm/79.VZ13Mm9TBN9GvJwt1LI1U5FVzakrLya5VJsXlTou3p5ZeWmo29bIUjubRuc31
# 1280000 rounds in 1.9206560000000001 seconds of cpu time
import os
import sys
import time
from getpass import getpass
from passlib.hash import sha512_crypt
rounds = os.environ.get('ROUNDS')
if not rounds:
rounds = sha512_crypt.default_rounds
passwd = input() if not sys.stdin.isatty() else getpass()
proc = sha512_crypt.using(rounds=rounds)
start = time.process_time()
out = proc.encrypt(passwd)
end = time.process_time()
print(out)
if os.environ.get('PROCESS_TIME'):
print('{} rounds in {} seconds of cpu time'.format(rounds, end-start))
Answer 5:
我一直在使用下面的shell命令来设置密码。
- name: "Set user password: someuser"
command: 'echo "somepassword"| passwd --stdin "someuser"'
sudo: yes
Answer 6:
尝试这样
vars_prompt:
- name: "user_password"
prompt: "Enter a password for the user"
private: yes
encrypt: "md5_crypt" #need to have python-passlib installed in local machine before we can use it
confirm: yes
salt_size: 7
- name: "add new user" user: name="{{user_name}}" comment="{{description_user}}" password="{{user_password}}" home="{{home_dir}}" shell="/bin/bash"
Answer 7:
您可以使用必须处理加密口令的生成能力的Jinja2过滤器。 这是一个工作示例来创建具有提供的密码的Linux用户:
- name: Creating Linux User
user:
name: "{{ myuser }}"
password: "{{ mypassword | password_hash('sha512') }}"
希望这将帮助您和他人。
Answer 8:
这需要pwgen
安装目标主机上:
- name: generate linux user password
local_action: shell /usr/bin/pwgen 16 1
register: generated_linux_user_password
使用hosts: localhost
, set_fact
和HOSTVARS,如果你需要“变量”全局可用(事实是创建后只读):
{{hostvars['localhost']["new_fact"]}}
文章来源: How do I create a user and set a password using ansible?