1.1.3 基础配置
下面将讲解一些Ansible的基础知识来帮助读者掌握Ansible的基础知识及使用原则,具体有以下四个方面。
l 定义主机清单
l 测试连通性
l know_hosts
l ping&ssh
接下来将逐个介绍,具体内容如下。
1.定义主机清单
主机清单(Hpst Inventory),又称主机目录,是一个保存着Ansible主机的所有客户机信息与连接参数的文件,同时也用于主机分类。Ansible的主机清单默认为/etc/ansible/hosts文件。用户可直接在该文件中自定义主机,具体代码如下所示。
[root@ansible ~]# vim /etc/ansible/hosts
[root@ansible ~]# cat /etc/ansible/hosts
host1
host2
host3
此处需要注意的是,在填写主机清单的时候,要确保当前Ansible服务器“认识”主机清单中的这些主机。在1.2.1小节中,作者已在Ansible服务器中加入了这三台主机的自定义域名解析,故此处填写主机名即可,否则配置不生效。
2.测试连通性
Ansible的工作需要与客户机进行沟通,此处通过Ansible的ping模块去测试与客户机的连通性,出现“SUCCESS”即表示成功,代码及结果如下所示。
#ping 自己
[root@ansible ~]# ansible localhost -m ping
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
#ping host1
[root@ansible ~]# ansible host1 -m ping
host1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
通过代码的反馈结果可以看到,系统通过使用Ansible的ping模块成功连通了客户机host1。在该条命令中,-m参数用来指定模块,不同的模块功能也不同,ping只是其中的一个模块,还有一些其他模块后边将会讲到。使用过程中,运维人员可以添加一个参数“-o”,使其简洁化输出,代码及如下所示。
[root@ansible ~]# ansible host1 -m ping -o
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
需要注意的是,Ansible不能对未在主机清单中标注的客户机进行操作。
3.know_hosts
在使用ping模块测试时,如果是第一次与客户机产生联系,系统会询问是否确定继续连接。去掉系统询问的操作如下所示。
#在/etc/ssh/ssh_config文件中找到#StrictHostKeyChecking一行,去掉注释并将行尾ask改为no
[root@ansible ~]# vim /etc/ssh/ssh_config
...
StrictHostKeyChecking no
...
#修改后记得保存该文件,并重启sshd服务
[root@ansible ~]# systemctl restart sshd
然后再次连接客户主机,具体代码如下所示。
[root@ansible ~]# ansible host1 -m ping -u root -k -o
SSH password:
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
上述示例中,参数-u用来指定用户,-k表示输入密码,-o表示简洁的输出。现在再使用ping模块时,系统已经不会出现询问。
4.ping&ssh
ansible的各个模块是相关联的,当一个模块无法连通客户机时,与之关联的模块可能也会出现问题。
首先将客户机host1的SSH服务关闭,具体代码如下所示。
[root@host1 ~]# systemctl stop sshd
接着通过Ansible服务器的ping模块去连接客户机host1,具体代码如下所示。
[root@ansible ~]# ansible host1 -m ping
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host host1 port 22: Connection refused",
"unreachable": true
}
上述示例中,在客户机SSH服务关闭之后,Ansible服务器便无法通过ping模块连接客户机。由上述实验结果可知,Ansible是依赖SSH协议去通信的,想要使用它必须先让Ansible服务器与客户机的SSH保持连通性。并且Ansible的ping模块可用于探测服务器之间的SSH是否连接。