在linux中为了安全,一般root(超级管理员权限)是不可能随便给人用的,但是在linux中有些命令只有root才能执行,因此我们用普通用户执行这些命令时需要给他们添加sudo权限
配置文件/etc/sudoers 注意:这个配置只要root用户才有权限进行修改
这里使用ansible批量创建一个普通用户,然后给这个用户用sudo提权
# 创建用户alice ansible test -m user -a "name=alice password={{'123'|password_hash('sha512')}}" # sudo权限,让alice可以执行任何命令 ansible test -m lineinfile -a "path=/etc/sudoers line='alice ALL=(ALL) NOPASSWD:ALL'
修改主配置文件ansible.cfg
[defaults] inventory = ~/ansible/hosts remote_user = alice #以什么用户远程被管理主机 [privilege_escalation] become = true # 是否需要切换用户 become_method = sudo # 如何切换用户 become_user = root # 切换成什么用户 become_ask_pass = False # sudo是否需要输入密码
当在控制机上用ansible批量管理其他节点(如果用alice用户管理),需要加上上面的配置文件,且需要控制机到各个节点的实现免密
for i in db01 db01 do ssh-copy-id alice@$i done
这样就可以用普通用户管理其他节点了
补充:我们用ansible配置host文件时,账户和密码以及端口都是统计管理,但是如果需要做特别设置(自定义),这里我们可以改一下hosts文件
修改主机清单文件,添加变量(多个变量可以用空格分隔) [test] db01 ansible_ssh_port=220 #自定义远程ssh端口 db02 ansible_ssh_user=alice #自定义远程连接账户 [servers] db03 ansible_ssh_pass=密码 #自定义远程连接密码 db04 ansible_ssh_private_key_file=密钥文件 #自定义远程连接密钥 db05