Linux企业级——Ansible安装、配置及使用
文章目录
1.实验环境:
虚拟机名称 | ip | 版本 | 角色 |
---|---|---|---|
server1 | 172.25.1.1 | 7.5 | ansible主机 |
server2 | 172.25.1.2 | 7.5 | 远程主机hosts |
server3 | 172.25.1.3 | 7.5 | 远程主机hosts |
注:三台虚拟机均需连接网络
2.安装ansible
2.1 配置epel的yum源:
vim /etc/yum.repos.d/epel.repo #编辑epel的yum源
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
yum clean all
yum repolist #重新加载yum源
2.2 安装ansible
yum install ansible -y #安装
注:ansible查找配置文件的顺序为
1)ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件
2)./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件
3)~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件
4)/etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件
2.3 定义Inventory(主机列表)
在/etc/ansible/hosts中写入被管控主机
vim /etc/ansible/hosts #编辑主机列表文件
[test] #定义组test,将server2和server3添加到组中
172.25.66.2
172.25.66.3
2.4 调用ping模块来检测网络是否可达
ansible test -m ping -k #-m是指定调用的模块,-k是指使用密码登陆,命令行会提示输入SSH密码
注:在此之前一定要使用ssh命令登陆远程主机
3.分发任务
3.1 创建普通用户
Linux机器都禁止使用root远程登陆,更安全的做法是用普通用户登陆,分发任务。
在三台虚拟机上均添加普通用户devops,并设置密码:
useradd devops
echo westos | passwd --stdin devops
3.2 设置devops用户的权限
在三台虚拟机上均执行:
visudo #进入权限设置界面
devops ALL=(ALL) NOPASSWD: ALL #添加devops用户权限
3.3 主机免密
在server1:
su - devops #切换至devops用户
ssh-keygen #生成密钥
ssh-copy-id 172.25.66.1 #给server1发放密钥
ssh-copy-id 172.25.66.2 #给server2发放密钥
ssh-copy-id 172.25.66.3 #给server3发放密钥
注:三台虚拟机中均要有解析
ssh 172.25.66.1 #尝试连接server1
ssh 172.25.66.2 #尝试连接server2
ssh 172.25.66.3 #尝试连接server3
3.4 建立ansible目录
mkdir ansible #创建ansible目录
cd ansible/ #进入ansible目录
vim ansible.cfg #编辑配置文件
[defaults]
inventory = ./hosts #inventory文件路径
vim hosts #编辑hosts文件
[test] #定义组test
172.25.66.2 #定义组变量
[db] #定义组db
172.25.66.3 #定义组变量
3.5 检测文件配置是否成功:
ansible test -m ping #对test组内主机调用ping模块
ansible db -m ping #对db组内主机调用ping模块
ansible all -m ping #对所有组内主机调用ping模块
ansible '*' -m ping #对所有组内主机调用ping模块
3.6 -b和-u参数
ansible test -m copy -a "src=test.sh dest=/mnt/test.sh" -b #使用root(默认用户)拷贝文件
注:不使用-b进行模块copy时,会因权限问题报错,文件复制不过去,使用-b,文件传输到hosts主机上时切换身份,调用sudo,执行其权限。
ansible test -m copy -a “src=test.sh dest=/mnt/test.sh” -u devops -b #使用指定用户(devops)拷贝文件
注:-u 指定ssh连接的用户名,连接到hosts主机后,身份为指定用户,指定用户必须存在。
3.7 修改配置文件
以上过程可以经过ansible.cfg配置文件进行统一处理:
remote_user=devops #在远程主机上以devops用户身份执行任务
become: True #是否允许身份切换
become_method=sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo,被控主机为centos的话需要设置become_method为su
become_user=root #切换成什么用户身份,默认为root。设置为root账户,等于以普通账户登入到远程主机时,再使用su - root切换为root账户。
ansible_become_pass=False #使用root账户,则这里要写的就是root账户的密码,此处设置为Flase因为已经做过免密登陆
此时再次测试就无需使用用户和密码登陆了:
ansible test -m copy -a “src=test.sh dest=/mnt/test.sh” #直接拷贝
附:ansible参数及其功能
-m 要执行的模块,默认为command
-a 指定模块的参数
-u ssh连接的用户名,默认用root,ansible.cfg中可以配置
-b,–become 变成那个用户身份,不提示密码
-k 提示输入ssh登录密码,当使用密码验证的时候用
-s sudo运行
-U sudo到哪个用户,默认为root
-K 提示输入sudo密码,当不是NOPASSWD模式时使用
-C 只是测试一下会改变什么内容,不会真正去执行
-c 连接类型(default=smart)
-f fork多少进程并发处理,默认为5个
-i 指定hosts文件路径,默认default=/etc/ansible/hosts
-I 指定pattern,对已匹配的主机中再过滤一次
-list-host 只打印有哪些主机会执行这个命令,不会实际执行
-M 要执行的模块路径,默认为/usr/share/ansible
-o 压缩输出,摘要输出
–private-key 私钥路径
-T ssh连接超时时间,默认是10秒
-t 日志输出到该目录,日志文件名以主机命名
-v 显示详细日志
使用
-C 只是测试一下会改变什么内容,不会真正去执行
-c 连接类型(default=smart)
-f fork多少进程并发处理,默认为5个
-i 指定hosts文件路径,默认default=/etc/ansible/hosts
-I 指定pattern,对已匹配的主机中再过滤一次
-list-host 只打印有哪些主机会执行这个命令,不会实际执行
-M 要执行的模块路径,默认为/usr/share/ansible
-o 压缩输出,摘要输出
–private-key 私钥路径
-T ssh连接超时时间,默认是10秒
-t 日志输出到该目录,日志文件名以主机命名
-v 显示详细日志