两台可以通信的主机ansible和node1,都具有完整的软件仓库。
主控机 ansible 172.25.254.107
受控机 node1 172.25.254.207
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。
epel源
在浏览器中搜索epel for linux
,下载安装包到本地,安装即可。(此方法不建议,下载速度过慢)
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm /mnt ##下载epel源
yumdoenloader ansible --destdir=/mnt --resolve ##安装ansible
dnf install sshpass-1.06-9.el8.x86_64.rpm -y ##下载依赖性
dnf install ansible-2.9.11-1.el8.noarch.rpm -y
ansible --version
直接下载镜像中不存在的依赖性软件。即复制两个安装包到本地某一目录中。
复制文件到主控机ansible下的/mnt目录中;
查看是否下载完成;
使用ansible --version
查看ansible版本测试是否安装成功。
信息 | 意义 |
---|---|
/etc/ansible/ansible.conf | 全局配置文件,默认很少修改 |
/etc/ansible/hosts | 全局主机清单文件 |
清单就是Ansible所控制的主机的列表
其中/etc/ansible/hosts
即为全局清单文件
直接书写受控主机名或ip,每行一个
node1.westos.com
172.25.254.207
未书写时不能列出清单内容,会显示清单内容为空的提示;
在/etc/ansible/hosts
清单文件的最后添加受控主机ip,保存后退出;
再次列出清单内容,显示207主机,但不能够ping通
当要控制207主机时首先会在控制主机中生成py脚本,然后远程通过sshd服务传输到被控主机中在传文件过程中需要后者的认证通过才能访问和管理(访问成功会显示与ping相对应的pong)
(1)、在受控主机添加用户
注意要为新添用户设置密码,否则之后设置密匙时会报错
(2)、在控制主机建立密钥和密匙
(3)、在控制主机测试用户权限是否设置成功
直接访问207主机显示权限有问题,使用用户devops用户访问成功,说明可以使用控制主机管理以devops用户身份运行的207主机
(4)、设置受控主机用户权限和免密访问
使用devops用户完成shell模块的内容会失败,原因是当前在207主机中运行指令是以devops这个普通用户的身份来执行的,权力会很小,需要在207受控主机下方权力
权力下放并设置免密访问
完成shell模块指令
序号 | 意义 |
---|---|
1 | 指定devops在执行命令时用sudo调用 |
2 | 询问sudo密码 |
文件创建成功 | |
ansible 清单中组名称 [-i 清单文件] --list-hosts
ansuible ungrouped --list-hosts
ansible all --list-hosts
各个清单相互独立,不会有相互重叠的ip或主机名称
[list1]
node1.westos.com
node2.westos.com
[list2]
node2.westos.com
[list3]
172.25.254.240
一个主清单会包含另外一个或多个子清单
[westos:children]
list1
list3
通过指定主机名称IP范围可以简化Ansible主机清单
语法:
[start:end]
[westostest]
172.25.254.[100:108]
[root@ansible ansible]# ansible westostest --list-hosts
hosts (9):
172.25.254.100
172.25.254.101
172.25.254.102
172.25.254.103
172.25.254.104
172.25.254.105
172.25.254.106
172.25.254.107
172.25.254.108
vim inventory
172.25.254.240
[westostest]
172.25.254.100
172.25.254.200
测试:
ansible all -i inventory --list-hosts
ansible westostest -i inventory --list-hosts
ansible ungrouped -i inventory --list-hosts
ansible命令指定清单的正则表达式
符号 | 意义 |
---|---|
* | 所有 |
: | 逻辑或 |
:& | 逻辑与 |
:! | 逻辑非 |
~ | 以关键字开头 |
~(str1 | str2) |
172.25.254.*
westos*
westos1:linux
172.25.254.100:172.25.254.200
westos1:&linux
主机即在westos1清单也在linux清单中:!
westos1:!linux
在westos1中不在linux中
举例:
vim /mnt/inventory
172.25.0.250
192.25.0.250
[westos_list1]
node1.westos.com
[westos_list2]
172.25.0.2
172.25.0.1
[westos_list3]
172.25.0.1
172.25.0.3
[westos_all:children]
westos_list2
westos_list3
ansible 清单中组名称 -m 模块 -u remote_user
/etc/ansible/ansible.cfg
#基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg
#用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg
#优先级最高
[default] ##基本信息设定
inventory= ##指定清单路径
remote_user= ##在受管主机上登陆的用户名称,未指定使用当前用户
ask_pass= ##是否提示输入SSH密码,如果公钥登陆设定为false
library= ##库文件存放目录
local_tmp= ##本机临时命令执行目录
remote_tmp= ##远程主机临时py命令文件存放目录
forks= ##默认并发数量
host_key_checking= ##第一次连接受管主机时是否要输入yes建立host_key
sudo_user= ##默认sudo用户
ask_sudo_pass= ##每次在受控主机执行ansible命令时是否询问sudo密码
module_name= ##默认模块,默认使用command,可以修改为shell
log_path= ##日志文件路径
1、创建操作目录并编写文件
本操作需要先切换到107主机的普通用户
2、复制ssh钥匙到当前用户
3、生成密钥和密匙分别为107主机和207主机