先放个链接,万一有人关注呢
↓ ↓ ↓ ↓ ↓
主机组名
当使用Ansible批量执行命令或批量部署服务时,主机清单的优势就体现出来了。在主机清单中,将所有机器分成不同的组并定义不同的组名,运行命令时只需要指定特定的组名就能达到批量操作的目的。
修改主机清单
[]host1host2host3
上述内容中“ webserver”是组的名称,组名下是该组中包括的主机名。
既然添加了组名,那么就可以通过制定组名来控制被管理节点,在管理节点执行以下命令。
ansible webserver -m ping用户与密码
将被管理节点用户信息写入到主机清单中,即可取消密钥,实现免密连接。
删除管理节点中的秘钥
[root@ansible ~]# ls -a. .ansible .bash_profile init1.sh .tcshrc.. .bash_history .bashrc .pki .viminfoanaconda-ks.cfg .bash_logout .cshrc .ssh[root@ansible ~]# ls .sshid_rsa id_rsa.pub known_hosts[root@ansible ~]# rm -rf .ssh/id_rsa .ssh/id_rsa.pub
秘钥删除后,管理节点将无法连接被管理节点。
修改主机清单文件,在主机清单中添加被管理节点的用户与密码,内容如下
[]host1 ansible_ssh_user='root' ansible_ssh_pass='1'host2host3
这里只给host1配置了用户与密码。
尝试连接各个节点
ansible webserver -m ping输出结果如下
host2 | UNREACHABLE! => {"changed": false,"msg": "Failed to connect to the host via ssh: ssh: connect to host host2 port 22: Connection refused","unreachable": true}host3 | UNREACHABLE! => {"changed": false,"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).","unreachable": true}host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}
上述结果中,只有host1输出的是“SUCCESS”,也就是说,只有host1连接成功,而没有配置用户名与密码的被管理节点则无法被管理节点连接。
当拥有多个被管理节点时,则需要在主机清单中的每个被管理节点都添加用户名与密码,这将是一个较为繁琐的过程。所以Ansible能够支持一些更加便利的主机清单管理方式。
修改主机清单内容如下
[]host[1:3] ansible_ssh_user='root' ansible_ssh_pass='1'
由于3台被管理节点的主机名只有最后的数字不同,所以可以简写为“host[1:3]”来表示3台被管理节点。这样只需要添加一条用户信息即可,前提是3台被管理节点的用户名与密码都是相同的。
再次尝试连接被管理节点
ansible webserver -m ping输出结果如下
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": false,"ping": "pong"}
此时管理节点已经可以连接到上述3台被管理节点。
端口信息
当Ansible用ping模块去测试被管理节点的SSH连接状态时,使用的是SSH协议的默认端口。通常,在企业中为了网站的安全性,会修改一些协议的默认端口,如此一来,Ansible便无法通过默认端口连接被管理节点。下面我们针对这一情况做出相应的解决方法。
先修改任意一台被管理节点的SSH端口。编辑/etc/ssh/sshd_config文件:
vim /etc/ssh/sshd_config修改端口内容
...Port 2222...
这里将被管理节点host2的SSH服务端口修改为2222,重新启动即可生效。
reboot此时,管理节点已经无法连接到该节点,不信邪的同学可以试试。
在主机清单中配置端口信息,如下:
[]host[1:3] ansible_ssh_user='root' ansible_ssh_pass='1'host2 ansible_ssh_port='2222'
需要注意的是,刚刚修改的是哪个节点的端口就配置哪个节点,不要搞混了。
主机清单配置完成后,就可以连接到被管理节点了。
ansible webserver -m ping变量
在Ansible中的变量分为内部变量与自定义变量,通过在主机清单中添加一些变量能够使用户管理更加便捷。在主机清单中添加被管理节点的用户名与密码的手段就是在往主机清单中添加变量。
常见的Ansible变量如下。
|
变量 |
说明 |
ansible_ssh_host |
定义hosts ssh地址 |
ansible_ssh_port |
定义hosts ssh端口 |
ansible_ssh_user |
定义hosts ssh认证用户 |
ansible_ssh_pass |
定义hosts ssh认证密码 |
ansible_sudo |
定义hosts sudo用户 |
ansible_sudo_pass |
定义hosts sudo密码 |
ansible_sudo_exe |
定义hosts sudo路径 |
ansible_connection |
定义hosts连接方式 |
ansible_ssh_private_key_file |
定义hosts私钥 |
当需要对一个主机组添加一些变量时,可以为这个主机组配置一个专属的变量组,如下
#主机组[webserver]host1host2host3#变量组[webserver:vars]ansible_ssh_user='root'ansible_ssh_pass='1'
需要注意的是,变量组的命名格式必须是“[主机组名:vars]”。
子分组
创建子分组也是一种简化主机清单的方式。简而言之,就是在分组中创建分组。
修改主机清单,如下
[]host1[]host[2:3][]apachenginx...
上述配置中,webserver组中包含了apache组和nginx组,apache组和nginx组同时存在于webserver组中,三个组名可以随意调用。此处需要注意的是,当分组中包含子分组时,分组名称的命名格式必须是“[分组名:children]”。
分别连接三个组中的节点都是成功的
ansible apache -m pingansible nginx -m pingansible webserver -m ping
自定义主机清单
当用户面临数量不断增多的主机时,可以创建多个主机清单,甚至可以存放到不同的路径下。
在/tmp下创建一个主机清单
cd /tmpvim hostlist
主机清单内容如下
[]host1host2host3
在使用该主机清单对节点进行管理时,需要使用-i选项来指定主机清单,如下:
ansible -i /tmp/hostlist docker -m ping这条命令中,/tmp/hostlist是主机清单的路径,docker是主机清单中的主机组名称。
未完待续。。。。。。
来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。
↓↓↓ 点个在看,无需赞赏!
原文作者:运维book思议;如有侵权,请联系管理员删除。