Cryptography 如何使用ansible创建用户并设置密码?

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

第二部分提到了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$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格式结尾

  • Python文档指的是DES,但是如何调用SHA-512或MD5,文档在哪里

  • 我真的应该把
    crypt.crypt
    的输出切掉第一个$6,让$N$SALT$CRYPTED吗?这是ansible需要的吗

  • 这对我很有用(使用python 2.7.4):

    我有一个vars.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
    
    还有一本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,并使用散列保存盐。使用函数,例如