Cryptography 如何使用ansible创建用户并设置密码?
第二部分提到了github,但这有点稀疏和神秘 上面说:Cryptography 如何使用ansible创建用户并设置密码?,cryptography,pycrypto,ansible,Cryptography,Pycrypto,Ansible,第二部分提到了github,但这有点稀疏和神秘 上面说: # created with: # crypt.crypt('This is my Password', '$1$SomeSalt') password: $1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI. 但不会发出示例所示的信息。它还使用MD5 我试过这个: # python import crypt crypt.crypt('This is my Password', '$6$somereallyniceandb
# created with:
# crypt.crypt('This is my Password', '$1$SomeSalt')
password: $1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI.
但不会发出示例所示的信息。它还使用MD5
我试过这个:
# python
import crypt
crypt.crypt('This is my Password', '$6$somereallyniceandbigrandomsalt$')
>> '$69LxCegsnIwI'
但是用户的密码字段应该是这样的:
password: $6$somereallyniceandbigrandomsalt$UqddPX3r4kH3UL5jq5/ZI.
---
password: $6$Som3S@lt$XGoe9ONI00NaTkYn46CLDr8TSkvkovahinFqy95vrSe5Hzx2999C9mgF76ODFRnXMJHUCWFHLdkYd3c7AB9WV.
---
- hosts: vagrant
vars_files:
- vars.yml
user: vagrant
tasks:
- name: create artefactual user
user: name=artefactual state=present password={{password}} shell=/bin/bash
其中包括三个$delimiter,用于分隔6
(表示它是SHA-512散列)、salt和加密密码
请注意,python没有提到任何关于$N格式的内容
问题:
crypt.crypt
的salt应该以尾随的$结尾,还是以$N$salt格式结尾crypt.crypt
的输出切掉第一个$6,让$N$SALT$CRYPTED吗?这是ansible需要的吗password: $6$somereallyniceandbigrandomsalt$UqddPX3r4kH3UL5jq5/ZI.
---
password: $6$Som3S@lt$XGoe9ONI00NaTkYn46CLDr8TSkvkovahinFqy95vrSe5Hzx2999C9mgF76ODFRnXMJHUCWFHLdkYd3c7AB9WV.
---
- hosts: vagrant
vars_files:
- vars.yml
user: vagrant
tasks:
- name: create artefactual user
user: name=artefactual state=present password={{password}} shell=/bin/bash
还有一本playbook.yml像这样:
password: $6$somereallyniceandbigrandomsalt$UqddPX3r4kH3UL5jq5/ZI.
---
password: $6$Som3S@lt$XGoe9ONI00NaTkYn46CLDr8TSkvkovahinFqy95vrSe5Hzx2999C9mgF76ODFRnXMJHUCWFHLdkYd3c7AB9WV.
---
- hosts: vagrant
vars_files:
- vars.yml
user: vagrant
tasks:
- name: create artefactual user
user: name=artefactual state=present password={{password}} shell=/bin/bash
我使用vagrant运行我的playbook,vagrant up
,然后从另一个控制台,我可以使用ansible创建的人工用户ssh到新创建的vm,密码为thisismypassword
我只是将crypt.crypt的输出复制到名为password的ansible变量中并使用了它。您在问题中显示的crypt的输出看起来太短,我不确定您为什么会这样,可能是python的不同版本?文档中显示的python示例取决于您使用的操作系统上运行的crypt版本 我在OSX上生成了密码,目标服务器是ubuntu 由于操作系统提供的crypt实现方式不同,结果也不同且不兼容 改用这个: Passlib是Python2&3的密码哈希库,它提供 30多种密码哈希算法的跨平台实现, 以及管理现有密码哈希的框架。它是 设计用于广泛的任务,从验证散列 可以在/etc/shadow中找到,以便为 多用户应用程序 “$6$rounds=656000$BthPsosdEpqOM7Qd$l/ln9nyEfxM67ea8Bvb79JoW50pGjf6iM87taIvfSmpjasE4/wBG1.60pFS6W992T7Q1q2wikMbxYUvMHD1tT1”像这样试试看
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"
我一直在使用下面的shell命令来设置密码
- name: "Set user password: someuser"
command: 'echo "somepassword"| passwd --stdin "someuser"'
sudo: yes
您可以使用能够处理加密密码生成的jinja2过滤器。以下是使用提供的密码创建linux用户的工作示例:
- name: Creating Linux User
user:
name: "{{ myuser }}"
password: "{{ mypassword | password_hash('sha512') }}"
希望这将对您和其他人有所帮助。这已在中更新。有两种首选方式: 如何为用户模块生成加密密码 在大多数Linux系统上可用的mkpasswd实用程序是一个很好的选择:
mkpasswd--method=SHA-512
如果您的计算机上未安装此实用程序
系统(例如,您正在使用OS X),然后您仍然可以轻松生成
这些密码使用Python编写。首先,确保Passlib密码
已安装哈希库
pip安装passlib
一旦库准备就绪,SHA512密码值
然后可以按如下方式生成:
python-c“从passlib.hash导入sha512\u crypt;导入getpass;打印sha512\u crypt.encrypt(getpass.getpass())”
这需要在目标主机上安装
pwgen
:
- name: generate linux user password
local_action: shell /usr/bin/pwgen 16 1
register: generated_linux_user_password
如果需要“变量”全局可用(事实在创建后只读),请使用hosts:localhost
、set\u fact
和hostvars:
我把它做成了一个脚本,可以包含在我正在做的docker项目中。我知道很多开发人员都使用macOS/OSX,而且该平台上没有mkpasswd
,所以我把谷歌搜索保存了下来
我添加了以下选项:
- 处理时间(布尔值)
- 使用轮数和CPU时间启用第二行输出
- 四舍五入(整数)
- 覆盖“平均”系统上调整为约300ms的值。您希望至少100毫秒,但应尽可能大,你可以负担得起李>
#/usr/bin/env蟒蛇3
#因为OSX没有mkpasswd。。。
#基于https://stackoverflow.com/a/17992126/117471
#python3-c“来自passlib.hash import sha512_crypt;print(sha512_crypt.encrypt(input()))”A1:在salt中拖尾$没有任何区别。与Ansible IRC人员交谈时,您应该根据从Github获得的反馈进行更新并回答,反馈没有解决问题。我仍然无法使用ansible创建密码。我会更新这个问题,因为还有更多的信息要补充。谢谢你的提醒,抱歉,但我刚刚回滚了你的编辑。您删除了链接,其余的更改只是大小写更改,其中一些更改导致语法错误。这对问题没有任何补充。请看我刚刚发布的答案。使用PythonCrypt是不可跨平台转移的。较少的跨平台,只能在ubuntu上使用。Crypt附带python,适用于所有应用程序。谢谢!MacOS支持此方法。如何处理此输出字符串?我应该把它放在哪里,这根绳子的哪一部分?您能否提供使用此字符串的ansible playbook示例?是否需要将“替换为”“这样我就可以在yml中使用它了?谢谢!我把它做成了一个脚本,并将其包含在我的项目中,以避免macOS用户不得不通过谷歌获得答案。我在下面的回答中加入了脚本。仅仅使用散列函数是不够的,仅仅添加一个salt对提高安全性几乎没有作用。相反,使用随机盐在HMAC上迭代大约100ms,并使用散列保存盐。使用函数,例如