在当今快速发展的IT环境中,自动化运维成为了提高工作效率、减少人为错误的关键手段之一。Ansible作为一款强大的自动化工具,其简洁的配置管理和任务执行能力深受广大运维人员的喜爱。本文将聚焦于Ansible中的authorized_key
, user
, 和 group
三个模块,探讨它们如何帮助我们实现更高效的用户管理与权限分配。

让机器干活,让人思考。
authorized_key模块用于管理SSH授权密钥,它允许我们在远程主机上添加、修改或删除用户的SSH公钥。这对于确保只有授权用户能够通过SSH访问服务器至关重要。使用此模块时,可以指定user(用户名)、key(公钥字符串)等参数来完成操作
| 模块名称 | 模块说明 |
| user(required) | 用户名 |
| key(required) | ssh公钥文件 |
| state | present 和 absent |
| path | authorized_keys文件路径 |
示例配置:
1、授权免密登录ansible主机的ops用户
$ ansible -i hosts 172.139.20.121 -m authorized_key -a "user=ops key={{ lookup('file', '/home/ops/.ssh/id_rsa.pub') }} state=present"
172.139.20.121 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": null,
"exclusive": false,
"follow": false,
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnsbz/9E/gI6J20GmcniSWsLH2KS5XJQepkrADAN15S/8EbjpqaXR2FSigIt0fuRjS5K3fCVOIGC9Yi/caoa/vl5ALoAi2lF+v1gvdvMPVtSWXQFjVkP5BCrZTxCxCBPBjr0uPc9UPvTvBpD/h4A1cLDxXia3LX1iLweN1B6HF1Dp0ou6Ck+SLy2/x+rkVP+fhhPjnYpWgP1nzWCpSY2kQxigcEws0Z9dFrLAM1+x6b4wILuYemV0UY0TnkBvHCyPFBDhxatGI+M/nDC0yD9ZLlUoazr8o2ofM4HVdlYk/+CPU0QSGtcgPqAEh36LwYexjBSpSRX8psL2wsYCq0UBd ops@ansible",
"key_options": null,
"keyfile": "/home/ops/.ssh/authorized_keys",
"manage_dir": true,
"path": null,
"state": "present",
"user": "ops",
"validate_certs": true
}
2、回收免密登录ansible主机的ops用户
$ ansible -i hosts 172.139.20.121 -m authorized_key -a "user=ops key={{ lookup('file', '/home/ops/.ssh/id_rsa.pub') }} state=absent"
172.139.20.121 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": null,
"exclusive": false,
"follow": false,
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnsbz/9E/gI6J20GmcniSWsLH2KS5XJQepkrADAN15S/8EbjpqaXR2FSigIt0fuRjS5K3fCVOIGC9Yi/caoa/vl5ALoAi2lF+v1gvdvMPVtSWXQFjVkP5BCrZTxCxCBPBjr0uPc9UPvTvBpD/h4A1cLDxXia3LX1iLweN1B6HF1Dp0ou6Ck+SLy2/x+rkVP+fhhPjnYpWgP1nzWCpSY2kQxigcEws0Z9dFrLAM1+x6b4wILuYemV0UY0TnkBvHCyPFBDhxatGI+M/nDC0yD9ZLlUoazr8o2ofM4HVdlYk/+CPU0QSGtcgPqAEh36LwYexjBSpSRX8psL2wsYCq0UBd ops@ansible",
"key_options": null,
"keyfile": "/home/ops/.ssh/authorized_keys",
"manage_dir": true,
"path": null,
"state": "absent",
"user": "ops",
"validate_certs": true
}
user模块是Ansible中用来创建、修改或删除系统用户的核心组件。通过这个模块,我们可以轻松地设置用户的属性,如用户名、密码、主目录、默认shell等。此外,user模块还支持定义用户所属的组以及是否锁定账户等功能。
| 模块名称 | 模块说明 |
| name(required) | 用户名 |
| uid | 设置用户id |
| group/groups | 用户所属组,授权多个用户组的话,请用 , 分割符 |
| system | 账号是否为系统账号, 默认 no |
| comment | 账号的注释 |
| create_home | 是否创建家目录,默认:yes |
| expires | 用户过期时间 |
| home | 家目录路径 |
| password | 将用户的密码设置为此加密值 |
| remove | 删除用户时,是否删除家目录。默认 no |
| state | present,absent |
示例配置:
# 创建test用户,密码为JIf.54*2s,有效期为一个月
$ ansible -i hosts 172.139.20.121 -e pwd="JIf.54*2s" -m user -a "name=test state=present password={{ pwd | password_hash('sha512') }} expires=`date -d '1 month' +%s`"
# 更新密码,与创建用户一样
$ ansible -i hosts 172.139.20.121 -e pwd="JIf.54*2sfs" -m user -a "name=test state=present password={{ pwd | password_hash('sha512') }}"
# 创建test用户,用户id为1888,组是root,不创建家目录,有效期3个月
$ ansible -i hosts 172.139.20.121 -m user -a "name=test uid=1888 group=root create_home=no expires=`date -d '3 month' +%s`"
# 删除test用户并删除家目录
$ ansible -i hosts 172.139.20.121 -m user -a 'name=test state=absent remove=true'
group模块则专注于系统组的管理。它可以用来创建新的用户组、更改现有组的信息或者删除不再需要的组。使用group模块时,可以通过指定name(组名)、gid(组ID)等选项来控制组的具体配置。
| 模块名称 | 模块说明 |
| name(required) | 用户组名称 |
| gid | 用户组id |
| state | present,absent |
示例配置:
# 创建test组,组id为1888
$ ansible -i hosts local -m group -a "name=test gid=188 state=present"
# 删除test组
$ ansible -i hosts local -m group -a "name=test state=absent"
通过本文对Ansible中authorized_key, user, 和 group模块的介绍,希望能帮助大家更好地理解和运用这些工具,以实现更加高效、安全的用户及权限管理。随着技术的发展,Ansible的功能也在不断丰富和完善,掌握这些基础知识将为您的自动化运维之路打下坚实的基础。希望每位读者都能在实际工作中找到适合自己的应用场景,让工作变得更加轻松愉快。
别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!

文章转载自Linux运维智行录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




