例子:
代码语言:javascript复制cat -n /etc/ansible/hosts
1 192.168.100.59:22
2 192.168.100.60 ansible_ssh_pass=123456 ansible_ssh_port=22
3 [nginx]
4 192.168.100.5[7:9]
5 [nginx:vars]
6 ansible_ssh_pass='123456'
7 [webservers:children]
8 nginx
第⼀⾏和第⼆⾏单独定义主机,第⼀⾏带上了连接被管节点的端⼝,第⼆⾏带上了单独传递给ssh的参数,分别是ssh连接时的登录远程⽤户的密码参数和ssh的连接端⼝。
第三⾏和第四⾏定义的是nginx主机组,该组中包含了192.168.100.57到59这3台主机。还⽀持字母的扩展,如"web[a-d]"。
第五⾏和第六⾏定义了要传递给nginx主机组的变量。若定义为"[all:vars]"或"[*:vars]"则表⽰传递给所有主机的变量。
第七和第⼋⾏定义了⼀个新的主机组webservers,该组的组成员有nginx组。
以上例子中存在的问题:
一般不推荐使用上面的ansible_ssh_pass=123456
明文密码,应该使用ssh私匙,但是在生产环境中,在主机中不可能只使用一种私匙,可能各种需要无密码连接的服务都使用了私匙,使用一种私匙很不安全,所以会有各种服务使用不同的私匙,那怎么办呢?
解决:
在ansible中需要使用ansible_ssh_private_key_file='私匙文件路径'
来指明ansible这个服务使用的私匙文件路径。
vim /etc/ansible/hosts
...
[nginx]
192.168.100.57 ansible_ssh_private_key_file="/root/.ssh/57_key"
192.168.100.58
192.168.100.59 ansible_ssh_private_key_file="/root/.ssh/59_key"
衍生问题:
在上面的指明ssh私匙文件路径的情况适合某一台主机,但是ansible都是主机组,无数多台主机,不可能每台主机后面都指明ssh私匙文件路径,那又怎么办呢?
解决:
这里就需要用到vars变量定义
,即可以定义一个变量,可以单独为一个主机组定义一个变量指明ssh私匙路径,该主机组的主机即可都是用该变量中指明的ssh私匙文件,也可以为所有主机组(all)定义一个变量,所有主机都使用变量中指明的的ssh私匙文件。
vim /etc/ansible/hosts
...
[nginx]
192.168.100.5[7:9]
...
[nginx:vars]
ansible_ssh_private_key_file="/root/.ssh/key"