目录
4、恢复ansible默认配置,并重新建立一套ansible体系
实验环境:一台可以上网的主机(ansible),两台客户机。配置好网络,配置好软件源。
一、ansible对企业运维的意义
在实际生产环境中,有成百上千台主机。一个人逐个主机进行设定不是容易的事情,费时费力还容易出错。因此需要通过Ansible实现对大量服务器的批量运维及管理。
二、安装Ansible
阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区阿里巴巴开源镜像站,免费提供Linux镜像下载服务,拥有Ubuntu、CentOS、Deepin、MongoDB、Apache、Maven、Composer等多种开源软件镜像源,此外还提供域名解析DNS、网络授时NTP等服务,致力于为互联网用户提供全面,高效和稳定的基础服务。https://developer.aliyun.com/mirror/?spm=a2c6h.13651104.0.d1002.196a530145Jmen由于ansible在镜像软件源中没有,所以需要通过epel源安装。epel源的软件包可以通过阿里巴巴镜像源下载:
配置epel镜像源:
安装ansible
三、构建ansible的清单
设置一个ansible清单,在管理主机时只对清单中的主机进行设定。
一个是ansible的主配置文件,一个是ansible的全局清单目录
1、清单的设定——全局清单
(1)单层清单
编辑ansible的清单配置文件</etc/ansible/hosts>。以“组”的形式,即这里分为westos组、linux组和list1组。
查看单层清单
ansible all --list-hosts #ansible查看所有清单
ansible all --list #ansible查看所有清单
#这个hosts可以不加
要查看哪个组就选哪个组
(2)嵌套清单
表示嵌套清单test中包含单层清单westos和linux
查看嵌套清单
2、主机规格的范围化操作
在添加批量主机时,如果主机太多,添加会比较麻烦。因此可以使用字符集合表示方法来简化。通过指定主机名称或IP的范围可以简化Ansible主机清单。
测试:
3、清单的设定——其他清单
在</mnt/>下创建一个清单,absible默认不会读取,所以需要添加参数<-i>来指定读取的清单位置。
ansible -i /mnt/ansible_list all --list #-i参数指定清单位置
查看不在组里的主机名
ansible -i /mnt/ansible_list ungrouped --list #查看不在任何组里的主机名
4、清单中的逻辑关系
* | 所有 / 172.25.254.* / westos* |
: | 逻辑或 / westos1:linux / 172.25.254.100:172.25.254.200 |
:& | 逻辑与 / westos1:&linux / 主机即在westos1清单也在linux清单中 |
:! | 逻辑非 / westos1:!linux / 在westos1中不在linux中 |
~ | 以关键字开头 |
~(str1|str2) | 以条件1或者条件2开头 |
ansible全局清单中包含以下内容,以这些内容为例。
< * > :匹配所有字符
< : > :逻辑或,满足两个条件之一即可
< :& >:逻辑与,同时存在于两个清单的主机
注意:因为逻辑与< :& >是一个特殊字符,所以中间要加上引号
ansible 'westos:&linux' --list #逻辑与
< :! >:逻辑非,在第一个清单且不在第二个清单中的主机。
注意:特殊符号需要用引号因起来,否则系统识别不了。
ansible 'westos:!linux' --list #在清单westos中且不在linux中的主机
< ~ >:以关键字开头
< ~(str1|str2)>:表示以str1开头的或者以str2开头的
注意:特殊符号需要用引号因起来,否则系统识别不了。
ansible '~(node|c)' --list #表示以node或者c开头的主机
四、Ansible配置文件参数详解
ansible的配置文件为</etc/ansible/ansible.cfg>
ansible 清单中组名称 -m 模块 -u remote_user
命令语法表示:在 清单中的主机 以 remote_user用户的身份 执行 **模块
如果不特殊指定的话,默认使用当前用户身份
基本信息设定:
#[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= | ##日志文件路径 |
ansible执行的本质是,将命令转换成<.py>文件,存放在local_tmp=设定的目录下,然后上传到远程主机remote_tmp=设定的目录下,远程主正常执行完毕后,删除双方的临时文件。
身份信息设定:用于设定sudo用户权限时
[privilege_escalation] | ##身份信息设定 |
become= | ##连接后是否自动切换用户 |
become_method= | ##设定切换用户的方式,通常用sudo |
become_user= | ##在受管主机中切换到的用户,通常为root |
become_ask_pass | ##是否需要为become_method提示输入密码,默认为false |
1、执行命令时,首次连接会出现主机密码验证
可以更改配置文件后,不再出现验证
2、连接远程主机时,需要<-k>输入密码,不输入密码就会报错。
ansible westos -m shell -a 'hostname' -k
3、添加默认默认清单
4、指定用户登录
默认不指定的情况下使用的是以当前用户身份。实际生产环境中容易造成混乱。
更改参数后重新测试:
默认以westos的用户身份登录<remote_user = westos>
5、身份转换
远程执行命令时以westos的用户身份登录,但是普通用户很多操作无法实现,这就需要sudo取得超级用户身份来执行。
测试:
作出如上更改后,还需要在受控主机中给普通用户westos的sudo授权。<visudo>
授权完成后,ansible显示以westos身份执行命令成功。
五、构建用户级Ansible操作环境
由于
一、每次执行命令时都需要输入远程密码,很麻烦。所以可以构建一个专属用户的ansible的操作环境。
二、同一Ansible主机上不同操作者的控制习惯不同,因此在原有的ansible默认配置的基础上,可以重新建立一套ansible配置体系。
1、Ansible的主机ssh免密
ssh-keygen #生成密钥
ssh-copy-id -i .ssh/id_rsa.pub westos@172.25.254.151 #向目标主机做做免密认证
2、取消受控主机的sudo密码<visudo>
3、取消ansible执行命令时的密码认证
4、恢复ansible默认配置,并重新建立一套ansible体系
在根目录下新建一个<.ansible>的目录,并将原ansible的配置文件</etc/ansible/ansible.cfg>复制到此目录下。稍后的修改就在此目录下的配置文件进行。
修改此目录下的配置文件如下:
文件<inventory>为此目录下的配置对应的用户清单;<module_name>选项默认为command,这里修改默认为shell
整个新建目录下的文件内容如下所示:
ansible在执行的时候会先读取自己当前所在目录下的配置文件,当前路径下没有才会读取</etc/ansible/>目录下的配置。
六、本章总结
1、ansible在执行的时候会先读取自己当前所在目录下的配置文件,当前路径下没有才会读取</etc/ansible/>目录下的配置。