Ansible-playbook:更改100个Linux服务器中多个不同用户的帐户密码

时间:2018-06-21 03:36:39

标签: ansible

i我需要更改几个帐户密码,例如testuser1和testuser2,testuser3。但是,从我拥有的100多个系统中,并不是所有人都同时拥有两个用户。有些系统有test_user1,有些系统有test_user2,有时两者都或没有。

这是我开始遇到问题的时候;我在下面创建了以下剧本:-

---
- name: Set Password
  hosts: test
  user: admin1
  become: yes
  ignore_errors: yes

  tasks:
  - shell: getent passwd testuser1 | wc -l | tr -d ' '
    register: user_exists_testuser1
    ignore_errors: yes

  - name: change password for testuser1
    user: name=testuser1 update_password=always 
    password="$1$3Zdze7Vx$ltv6dIsdfrsD7."
    when: user_exists_testuser1.rc == 0

  - shell: getent passwd testuser2 | wc -l | tr -d ' '
    register: user_exists_testuser2
    ignore_errors: yes

  - name: change password for testuser2
    user: name=testuser2 update_password=always 
    password="$1$sfddgv6dIxsdfssNt2D4."
    when: user_exists_root.rc == 0

  - shell: getent passwd testuser3 | wc -l | tr -d ' '
    register: user_exists_testuser3
    ignore_errors: yes

  - name: change password for testuser3
    user: name=testuser3 update_password=always 
    password="$1$3Zdze7VxDEFv6dHKHKSSt2D3."
    when: user_exists_adminusr.rc == 0

关于此脚本的问题: 如果系统上不存在该用户,则会创建该用户。有什么方法可以避免创建用户?

但密码在所有服务器上均正确更新。可以为上述手册提供更好的代码更改帮助。

1 个答案:

答案 0 :(得分:0)

您试图测试用户的存在,但是由于使用的是复杂的管道,因此丢失了getent的退出代码。您可以从命令行自己进行测试(诊断此类问题时总是一个好主意)。

如果我跑步:

$ getent passwd doesnotexist

然后检查错误代码,我看到它报告了退出状态2

$ echo $?
2

但是如果我使用您的管道,无论用户是否存在,我都会得到0

$ getent passwd doesnotexist | wc -l | tr -d ' '
$ echo $?
0

您应该这样重写测试,以便可以使用getent报告的退出代码:

- shell: getent passwd testuser1
  register: user_exists_testuser1
  ignore_errors: yes

- name: change password for testuser1
  user:
    name: testuser1
    update_password: always 
    password: "$1$3Zdze7VxDEFv6dHKHKSSt2D3."
  when: user_exists_testuser1.rc == 0

您可以充分利用Ansible循环来减小您的大小 剧本。