实验环境:
操作系统 | IP地址 | 角色 | 主机名 | CPU核心 |
CentOS7.5 | 192.168.96.4 | Ansible | ansible | 1 |
CentOS7.5 | 192.168.96.5 | Client | client1 | 1 |
CentOS7.5 | 196.168.96.6 | Client | client2 | 2 |
环境准备:
hostname ansible
bash
hostname client1
bash
hostname client2
bash
三台机器均关闭防火墙
[root@ansible ~]# setenforce 0
[root@ansible ~]# systemctl stop firewalld
[root@ansible ~]# hostname ansible
==================================================================
Ansible:
vim /etc/hosts
添加
192.168.96.4 ansible
192.168.96.5 client1
192.168.96.6 client2
scp /etc/hosts 192.168.96.5:/etc/
scp /etc/hosts 192.168.96.6:/etc/
YUM方式安装ansible
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all //清除yum缓存
yum -y install ansible
ansible --version //测试可以显示信息表示安装成功
创建SSH面交互登录:
Ansible机器操作:
ssh-keygen -t rsa -P "" -f .ssh/id_rsa
Client1端环境准备;
setenforce 0
systemctl stop firewalld
Client2端环境准备;
setenforce 0
systemctl stop firewalld
Ansible端向Client1和2发送密钥对:
ssh-copy-id root@192.168.96.5
ssh-copy-id root@192.168.96.6
Ansible配置:
vim /etc/ansible/hosts
写入
[crushlinux]
192.168.96.5
192.168.96.6
ansible crushlinux -m ping //环境已经搭好
ansible crushlinux -a "df -TH" //查两台机器的磁盘
基于sshpass分布秘钥:
rm -rf .ssh/authorized_keys //先删除之前的秘钥,以便在后边做对比
安装sshpass:
删除秘钥后需要输入密码才可以连接
yum -y install sshpass //安装sshpass
sshpass -p 000000 ssh root@192.168.96.5
使用sshpass向两台机器发送密码
sshpass -p 000000 ssh-copy-id root@192.168.96.5
sshpass -p 000000 ssh-copy-id root@192.168.96.6
如上图所示此时发送秘钥已经不存在交互问题。
第一次连接会手动输入yes,ssh解决不了。
去掉yes过程的方法一
sshpass -p 000000 ssh -o StrictHostKeyChecking=no root@192.168.96.5(第一次连接会手动输入yes,ssh解决不了;按照此格式便可以解决)
去掉yes过程的方法二
vim /etc/ssh/ssh_config //进入文档修改35行为no
编辑文档后发不发key都可以
vim /etc/ansible/hosts //进入文档添加下面内容
[nokey]
client2 ansible_ssh_host=192.168.96.6 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=000000
ansible nokey -m ping //修改后ping一下
【
client2=主机名
ansible_ssh_host=主机ip
ansible_ssh_port=ssh的默认端口
ansible_ssh_user=ssh的用户名
ansible_ssh_pass=ssh用户的连接密码
】
如果使用默认的lnventory文件{/etc/ansible/hosts} ,也可以不用指定lnvenntory文件默认就是
Ansible通过设备列表以分组的方式添加到/etc/ansible/hosts文件来实现对设备的管理,正式管理前先编写hosts文件,hosts文件中以[ ]包含的部分代表组名;
vim /etc/ansible/hosts //进入文档添加下面内容
ansible nokey -m ping //修改后ping一下
ansible test01 -m ping //修改后ping一下
添加的内容;
[client]
client1
client2
[test01]
client[1:2]
===================================================================================
Ansible语法:
ansible crushlinux -m command -a " " //在“ ” 中可以执行shell命令(-m指定模块 -a指定shell命令)
ansible crushlinux -m command -a "free -m" //查询crushlinux组内主机内存
ansible crushlinux -a "free -m" //可以不写 command ,默认模块就是 command
ansible crushlinux -a "free -m" --limit 192.168.96.6 //只限制192.168.96.6执行命令(--limit指定组内某个成员执行)
ansible 192.168.96.6 -a "free -m" //直接对hosts文件主机IP执行命令
ansible 192.168.96.* -a "free -m" //对hosts文件96网段的执行命令
Ansible命令:
ansible //双击tab键(使用最多的为ansible-playbook和ansible)
ansible时生产环境中使用非常频繁的命令之一,主要在一下场景应用
1.非固化需求(指的是临时性的维护,如查看服务器组的磁盘使用情况,复制一个文件到其他机器等没有规律的、临时需要做的任务)
2.临时一次性操作
3.二次开发接口调用
非固化需求语法;
ansible<主机>[参数]
ansible all -m ping //hosts文件内所有主机
ansible client1:client2 -m ping //clent1he clent2
ansible client:\!client2 -m ping
检查所有主机是否存活
ansible all -f 5 -m ping
列出crushlinux组内所有主机
ansible crushlinux --list-host
ansible crushlinux --list
批量显示crushlinux组内的磁盘使用情况
crushlinux需要提前在/etc/ansible/hosts文件中定义组
ansible的返回结果会用三种颜色来表示执行结果:
红色表示执行过程中有异常
橘黄色表示命令执行后目标有状态变化
绿色表示执行成功且没有对目标机器做修改
ansible-doc -l //查看总帮助(敲完命令会卡顿一会)
ansible-playbook:
Ansible-playbook是日常应用中使用频率最高的命令,类似于liunx系统中的sh或source命令,工作机制是通过读取编写好的playbook文件实现集中处理任务。ansible-playbook命令后跟yml格式的playbook文件,playbook文件存放了要执行的任务代码。
ansible-console:
ansible-console是ansible为用户提供的一款交互式工具,类似windows中的cmd以及Linux中的shell,用户在ansible-console虚拟出来的终端上做像shell一样使用ansible内置的各种命令。
(密码默认为ansible,[f:5]表示并发的线程为5个;cd crushlinux进入crushlinux组,list为显示组内内容)