目录
在环境中所用的系统和软件源必须一致
虚拟机,配置好网络和软件仓库
1.Ansible对于企业运维的重大意义
一对多的软件部署
2.Ansible的安装
epel源
网页搜索epel for redhat8
wget 下载
rpm -ivh 安装epel源
dnf install sshpass -y
dnf install ansible -y
ansible --viersionansible的基本信息:
/etc/ansible/ansible.cfg #全局配置文件,默认很少修改
/etc/ansible/hosts #全局主机清单清单文件
3.构建Anisble清单
清单就是ansible控制主机的列表
/etc/ansible/hosts #全局清单文件
vim /etc/ansible/hosts
最后一行 172.25.254.221
ansible all --list-hosts
当要控制221主机首先会在ansible主机中生成py脚本然后远程通过sshd服务传输到被控主机中在传文件的过程中需要后者的认证通过
-k #当执行ansible时询问ssh密码
ansible 172.25.254.221 -m ping -k跳过询问密码
ssh-keygen
ssh-copy-id -i /root/.ssh/id_rsb.pub yjy@172.25.254.221
因为root权限过大,服务器通常是普通用户,所以ansible通常使用普通用户控制普通用户
ansible 172.25.254.221 -m ping -u devops当前在221主机中运行指令用的是devops这个普通用户身份,权力非常小
ansible 172.25.254.221 -m shell -a 'touch /mnt/file' -u devops会报错所以需要在221主机中下方权限
visudo
100 devops ALL=(ALL) ALL
ansible 172.25.254.221 -m shell -a 'touch /mnt/file' -u yjy --become -K
--become #指定yjy在执行命令时用sudo调用
-K #询问sudo密码
visudo
100 yjy ALL=(ALL) NOPASSWD: ALL
ansible 172.25.254.221 -m shell -a 'touch /mnt/file' -u yjy --become 不需要密码
4.设定清单
4.1.指定清单
vim westos
172.25.254.111
172.25.254.222
ansible all -i westos --list #-i指定清单
4.2.未在任何组中的主机
ansible ungrouped --list
4.3.单层清单
vim /etc/ansible/hosts
[list1]
node1.westos.org[list2]
172.25.254.221[list3]
172.25.254.121
ansible list1 --list #查看指定组中的主机
4.4.嵌套清单
vim /etc/ansible/hosts
[list1]
node1.westos.org[list2]
172.25.254.221[westos:children] #嵌套清单,westos清单中有list1和list2两个子清单
list1
list2
ansible westos --list
vim /etc/ansible/hosts
[list1]
node1.westos.org[list2]
172.25.254.[90:100] #表示172.25.254.90到100的11台主机[westos:children]
list1
list2
4.5.正则表达式
* #所有
#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 "192*" --list #清单中所有以192字符开头的清单或清单中的主机
ansible "172*:192*" --list #逻辑或,以172开头或者192开头的所有主机
ansible "westos1:&westos2" --list #逻辑与,在清单westos1也在清单westos2中的
ansible 'westos1:!westos2' --list #逻辑非,在清单westos1但是不再westos2中的
ansible '~172' --list #表示以172开头的
ansible '~(172|192)' --list #表示以172或者192开头的
5.Ansible配置文件参数详解
ansible 清单中组名称 -m 模块 -u remote_user
5.1.配置文件的分类与优先级
/etc/ansible/ansible.cfg #基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg #用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg #优先级最高
5.2.常用配置参数
[default] #基本信息设定
inventory= #指定清单路径
remote_user= #在受管主机上登陆的用户名称,未指定使用当前用户
ask_pass= #是否提示输入SSH密码,如果公钥登陆设定为false
library= #库文件存放路径
local_tmp= #本地主机生成py脚本临时存在位置
remote_tmp= #受控主机生成py脚本临时存在位置
forks= #同时可以链接受控主机的个数
host_key_checking= #第一次连接受管主机时是否要输入yes建立host_key
sudo_user= #默认sudo用户
ask_sudo_pass= #每次在受控主机执行ansible命令时是否询问sudo密码
module_name= #默认模块,默认使用command,可以修改为shell
log_path= #日志文件路径module_utils #模块工具
[privilege_escalation] #身份信息设定
become= #连接后是否自动切换用户
become_method= #设定切换用户的方式,通常用sudo
become_user= #在受管主机中切换到的用户,通常为root
become_ask_pass #是否需要为become_method提示输入密码,默认为false
6.构建用户级Ansible操作环境
受控主机中:
useradd devops
passwd westos
下放权限
visudo
100 devops ALL=(ALL) NOPASSWD: ALL
Ansible服务器121:
useradd devops
passwd westos下放权限
visudo
100 devops ALL=(ALL) NOPASSWD: ALL
在root
ssh-keygen #生成密钥
ssh-copy-id -i ~/.ssh/id_rsa.pub devops@172.25.254.221 #上锁ssh-copy-id -i ~/.ssh/id_rsa.pub devops@172.25.254.121
visudo
devops ALL=(ALL) NOPASSWD: ALL
useradd yjy
passwd yjy
su - yjy
mkdir ~/ansible
cd ansible/
vim ansible.cfg
[defaults]
inventory = ~/ansible/inventory
host_key_checking = False
ask_pass = False
#roles_path =
remote_user = devops
module_name = shell
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
vim ~/ansible/inventory
[westos]
172.25.254.121
172.25.254.221
scp root@172.25.254.121:/root/.ssh/id_rsa /home/yjy/.ssh/
ansible westos -m ping普通用户yjy就可以控制本机的普通用户devops和221主机中的devops