一、怎么生成公私钥

# ssh-keygen

# ls /root/.ssh/
id_rsa                       私钥
id_rsa.pub                公钥
known_hosts            通过ssh协议通信过的机器的密纹
authorized_keys       存储传递过来的公钥

二、怎么拷贝公钥,如果要指定端口加-p,默认22端口

# ssh-copy-id  root@192.168.58.101

如果没有ssh-copy-id 命令 需要安装yum -y install openssh-clientsansible

验证:
# ssh root@192.168.58.101
# exit

三、假设ansible主被控端为sudo用户wsl时,该怎么办呢?

主控端:192.168.58.100
被控端:192.168.58.101
               192.168.58.102

第一步:主控端要做好免密

# ssh-keygen                                                          //创建公私钥,如果已经有,则不需要创建

# ssh-copy-id wsl@192.168.58.101                    //将本地主机的公钥复制到远程主机的authorized_keys文件上  
# ssh-copy-id wsl@192.168.58.102                    //将本地主机的公钥复制到远程主机的authorized_keys文件上  

或者循环复制       

# for host in 192.168.58.101 192.168.58.102
do
ssh-copy-id zhangsan@$host
done  

验证

# ssh wsl@192.168.58.101
# ssh wsl@192.168.58.102

第二步:修改配置文件,默认路径为/home/wsl/ansible/ansible.cfg

inventory = ~/ansible/inventory
host_key_checking = False                    //关闭第一次连接客户端时的SSH主机秘钥检查
remote_user = wsl

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

第三步:修改主机清单文件

# /home/wsl/ansible/inventory

[web1]
192.168.58.101

[web2]
192.168.58.102

[web3]
192.168.58.101
192.168.58.102

第四步:被控端需要做好sudo提权,单独提权或者添加到wheel组里面

账户名称为wsl,密码为123456,sudo用户必须有密码
修改sudo配置,让wsl用户可以执行任何管理命令

修改/etc/sudoers的方法如下:

# visudo                   (带语法检查,默认没有颜色提示)
# vim /etc/sudoers   (不带语法检查,默认有颜色提示)

授权格式如下:

在^root的下方添加
wsl            ALL=(ALL)       ALL,NOPASSWD:ALL

注意:
1、普通用户也可以使用ansible命令,如果在执行ansible时添加了sudo,那么就认为是root在执行ansible,如果root用户没有对被控端进行免密,也是执行不了的
2、如果执行ansible任务时涉及到本地执行connection: local,并且此任务本地执行普通用户执行不了,例如创建用户,命令在/usr/sbin/下,只有root用户或者sudo用户才能执行,就需要给主控端的普通用户提权
3、ansible的配置文件默认路径为/etc/ansible/ansible.cfg,如果当前所在位置存在ansible.cfg配置文件,优先识别当前所在位置下的ansible.cfg