ansible 运行的时候默认首先会以运行程序的用户身份与客户端的对应用户建立连接,比如以root身份运行ansible-playbook test.yml时,ansible首先会以root身份与客户机的root建立ssh连接。
如果要指定用户,需要使用--user 的参数,如果需要sudo 到root,需要用-s的参数
ssh-keygen
【注:切换到建立ssh连接的用户usera运行: su - usera,因为该认证文件只适用于本用户usera与其他用户的ssh连接认证】
拷贝ssh公钥到被控制机器节点
ssh-copy-id -i ~/.ssh/id_rsa.pub usera@xx.xx.xx.xx
在root用户下运行命令
ansible-playbook test.yml --user=usera --private-key=/home/usera/.ssh/id_rsa -s
ansible -i hosts testgroup -m ping --user=usera --private-key=/home/usera/.ssh/id_rsa -s
这里 --user=usera 表示使用usera与被控节点的usera建立ssh连接。--private-key表示ssh使用的认证文件,
-s 表示在连接到被控制机器节点后使用usera 的sudo权限运行test.yml中的命令。
由于需要使用usera的sudo权限,这里需要usera的sudo密码,有3种方式实现,第一:在运行命令中添加 --ask-sudo-pass,在命令运行时手动输入sudo的密码;第二,让usera sudo 免密码,第三:在ansible的配置文件hosts中配置sudo密码,ansible默认的hosts位于/etc/ansible/hosts。本文采用第3种方式。
hosts文件的配置如下所示:
[usera]
192.168.1.108 ansible_sudo_pass='123456'
[userb]
192.168.1.107 ansible_sudo_pass='123456'
【注:ansible 建立连接时默认使用的认证文件是该用户的主目录下的ssh rsa文件,所以当使用其他用户建立ssh连接时需要指定--private-key文件】
运行中的坑:
在拷贝玩ssh文件到被控制主机后,第一次运行会出现检查keys的对话,导致ssh连接失败,如下:
The authenticity of host '192.168.0.5 (192.168.0.5)' can't be established.
ECDSA key fingerprint is 05:51:e5:c4:d4:66:9b:af:5b:c9:ba:e9:e6:a4:2b:fe.
Are you sure you want to continue connecting (yes/no)?
为了确保连接ansible的顺利执行,需要在ansible的配置文件中添加忽略keys检查的配置,ansible的配置文件默认在
/etc/ansible/ansible.cfg。在该文件中添加如下语句即可。
host_key_checking = False
参考:
https://blog.youkuaiyun.com/github_36895970/article/details/53454048
http://ansible-tran.readthedocs.io/en/latest/docs/intro_installation.html#githubansible