首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ansible中为linux用户设置密码

在ansible中为linux用户设置密码
EN

Stack Overflow用户
提问于 2018-04-06 00:28:42
回答 2查看 2K关注 0票数 3

当尝试使用模块user管理用户密码时,每次执行剧本时,我都会得到密码更改通知,并且这种行为不依赖于ansible版本(在所有主要的2.0 -2.5上进行测试)、目标分发(在稳定的CentOS、Debian和Ubuntu上测试)或update_password选项。

代码语言:javascript
运行
复制
- name: This is in vault in real playbook of course
  set_fact:
    testuser_password : '123456'

- name: Manage test user
  user:
    name: testuser
    uid: 1001
    state: present
    password: "{{ testuser_password |password_hash('sha512')}}"

名为“管理测试用户”的任务总是被标记为更改。为了避免我用这个奇怪的结构

代码语言:javascript
运行
复制
- name: This is in vault in real playbook of course
  set_fact:
    testuser_password : '123456'

- name: Check if user exists
  shell: "getent shadow testuser | awk -F: '{ print $2}'"
  changed_when: false
  check_mode: false
  register: userexists

- name: Get salt for existing password
  shell: "getent shadow testuser | awk -F$ '{ print $3}'"
  changed_when: false
  check_mode: false
  register: passwordsalt
  when: userexists.stdout != ""

- name: Encrypt local password with salt
  set_fact:
    localsaltedpass: "{{ testuser_password |password_hash('sha512', passwordsalt.stdout )}}"
  when: userexists.stdout != ""

- name: Update remote password
  user:
    name: "testuser"
    uid: 1001
    password: "{{ testuser_password |password_hash('sha512')}}"
  when: 
    - userexists.stdout != ""
    - userexists.stdout != localsaltedpass

- name: Create test user if it does not exist
  user:
    name: "testuser"
    uid: 1001
    state: present
    password: "{{ testuser_password |password_hash('sha512')}}"
  when: userexists.stdout == ""

虽然这种方法解决了这个问题,但对我来说不太好。有没有任何想法可以正确地管理用户密码?

EN

Stack Overflow用户

回答已采纳

发布于 2018-05-01 03:22:33

这是因为每次调用password_hash过滤器时都会随机重新生成salt。要使设置密码为幂等,我们必须保留salt并将其作为第二个参数添加,如下所示:

代码语言:javascript
运行
复制
- name: This should be stored in a vault in a real playbook of course
  set_fact:
    user_password: 'passw0rd'
    user_salt: 'some.salty.salt'

- name: Manage testuser
  user:
   name: "username"
   password: "{{ user_password | password_hash('sha512', user_salt) }}"
   state: present
   shell: /bin/bash
   update_password: on_create

非常感谢@konstantin-suvorov向正确的方向推进。

另外,请记住,只有字母数字、点和斜线才能在盐类中使用,对于sha512,它不应该超过16个字符。谢谢你,彼得·德·兹瓦特对此作了澄清。

票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49683483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档