ansible - Ansible-playbook:在 100 台 linux 服务器中更改多个不同用户的帐户密码
问题描述
我需要更改几个帐户密码,例如 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
这个脚本的问题: 如果系统上不存在用户,它会创建它。有什么办法可以避免创建用户?
但是密码在所有服务器中都正确更新。可以在上面的剧本上对这个更好的代码更改有所帮助。
解决方案
您正在尝试测试用户是否存在,但由于您使用的是复杂的管道,您会丢失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 循环来减小剧本的大小。
推荐阅读
- java - JPA Transaction 和 Hibernate Transacation 和 Spring Transaction 有什么区别?哪个更有利?
- css - 如何使用 CSS 显示一行包含三个项目,一个在容器中左对齐,一个居中,一个右对齐?
- javascript - Vue2:使用输入类型为 textarea 的表单组件来显示和编辑数据(无需直接操作道具)
- python - 如何使用 numpy.savetxt 更新应该附加到数据的列表
- corda - Corda中具有到期日期的令牌?
- csv - CSV 中的 JMeter 正文数据
- python - 任何人都可以从 scipy.sparse.csr_matrix((data, indices, indptr), [shape=(M, N)]) 中理解这个意外的值错误吗?
- python - django - 关于模型保存方法,确定是否明确设置字段值,或者使用默认值
- terraform - Terraform 中的嵌套循环
- qgis - 通过 Python 脚本 startEditing 编辑图层,我们是否必须“关闭”编辑?