本章实验需要两台或者两台以上的主机:
主控机---> nodea【ansible】172.25.254.117
被控机---> nodeb:172.25.254.217
主控机有一台,被控机可以有很多台
1.Ansible对于企业运维的重大意义:一对多
2.Ansible的安装
epel源
dnf install ansible -y
ansible --viersion
实验:nodea中
【在教室没有网的情况可以用老师主机里之前下载的源】
cd /mnt
wget http://172.25.254.250/ansible/ansible-2.9.11-1.el8.noarch.rpm
wget http://172.25.254.250/ansible/sshpass-1.06-9.el8.x86_64.rpm
ls
dnf install sshpass-1.06-9.el8.x86_64.rpm -y #下载ansible的依赖性文件
dnf install ansible-2.9.11-1.el8.noarch.rpm -y
有网的情况下:【直接搜索epel for linux。下载epel 源,在进行安装就可以了。在下载的时候要在真机中打开地址伪装】
主控机连接其他被控机生成免密认证:【在nodea中】
dnf install expect -y
ssh-keygen
vim ssh_keygen.sh
AUTOSSH()
{
/usr/bin/expect <<EOF
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.$i
expect {
"yes/no" { send "yes\r";exp_continue }
"password" { send "westos\r" }
}
expect eof
EOF
}
for i in 217 221
do
AUTOSSH
done
sh ssh_keygen.sh
ssh -l root 172.25.254.217 #连接被控机的时候不需要输入密码,能直接连接
ansible的基本信息:
/etc/ansible/ansible.conf ##全局配置文件,默认很少修改
/etc/ansible/hosts ##全局主机清单清单文件
3.构建Anisble清单
清单就是ansible控制主机的列表
/etc/ansible/hosts ##全局清单文件
3.构建Anisble清单
清单就是ansible控制主机的列表
/etc/ansible/hosts ##全局清单文件
3.1直接书写受管主机名或ip,每行一个
node1.westos.com #在写主机名的时候,要给主机名添加解析
node2.westos.com
172.25.254.240
3.2设定受管主机的组[组名称]
清单查看:
ansible 清单中组名称 [-i 清单文件] --list-hosts
ansible ungrouped --list-hosts #ungrouped指其他组的名称,不属于任何组
ansible all --list-hosts
#单层清单#
[list1]
node1.westos.com
node2.westos.com[list2]
node2.westos.com[list3]
172.25.254.240
#嵌套清单#
[westos:children]
list1
list3
3.3主机规格的范围化操作
通过指定主机名称或IP的范围可以简化Ansible主机清单
语法:
[start:end]
[westostest]
172.25.254.[100:108]
3.4指定其他清单文件 [名称可以随便起]
vim /mnt/inventory
[lee]
172.25.254.200
[lee1]
172.25.254.217
[lee2]
172.25.254.[201:210]
补充:不在任何一个组内的被控机
ansible命令指定清单的正则表达式
* ##所有
##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开头
4.Ansible配置文件参数详解
ansible 清单中组名称 -m 模块 -u remote_user
1.配置文件的分类与优先级
/etc/ansible/ansible.cfg #基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg #用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg #优先级最高
2.常用配置参数
[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= ##日志文件路径[privilege_escalation] ##身份信息设定
become= ##连接后是否自动切换用户
become_method= ##设定切换用户的方式,通常用sudo
become_user= ##在受管主机中切换到的用户,通常为root
become_ask_pass ##是否需要为become_method提示输入密码,默认为false
5.构建用户级Ansible操作环境
实验步骤:
cd /mnt
vim /mnt/inventory
[westos]
172.25.254.217
[westos1]
172.25.254.221
vim /etc/ansible/hosts #删掉添加的清单组,还原全局主机清单文件
vim ssh_keygen.sh
ssh -l root 172.25.254.$i rm -rf /root/.ssh #把for语句里do的内容改为<----
vim /etc/ansible/ansible.cfg
第14行:inventory = /etc/ansible/hosts, /mnt/inventory #取消注释,添加指定清单路径
第71行取消注释
mkdir ansible #建立目录
cd ansible/
ansible westos -m ping -k #使用ansible ping清单组中的ip地址;-k 输密码
useradd devops #建立devops用户
su - devops
mkdir .ansible
cd .ansible/
vim inventory #编写清单
[westos]-------------->清单组名称
172.25.254.217
[westos1]
172.25.254.221
vim ansible.cfg
[defaults]
inventory = ~/.ansible/inventory
host_key_checking = False
remote_user = devops
module_name = shell
ansible all --list #查看清单列表
ansible 172.25.254.217 -m shell -a 'useradd devops' -k -u root #用root用户,使用ansible shell模块给ip是172.25.254.217的主机建立devops用户
ansible 172.25.254.217 -m shell -a 'echo westos | passwd --stdin devops' -k -u root #给刚远程建立的用户改密码
ansible 172.25.254.217 -m shell -a 'echo "devops ALL=(root) NOPASSWD: ALL" >> /etc/sudoers' -k -u root
ansible westos -m shell -a 'whoami' -k #查看用户身份 (用户身份是devops)
vim ansible.cfg
[defaults]
inventory = ~/.ansible/inventory
host_key_checking = False
remote_user = devops
module_name = shell
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
ansible westos -m shell -a 'whoami' -k #查看用户身份 (用户身份是root)
ansible westos -m shell -a 'ls /home/devops/.ssh' -k #查看目录地下的文件,正常是没有的
ansible westos -m shell -a 'mkdir -p /home/devops/.ssh' -k #给westos清单组名称下的ip建立多级目录
ansible westos -m shell -a 'chown devops.devops /home/devops/.ssh' -k
#修改westos清单组名称下的ip拥有者和拥有组
ansible westos -m shell -a 'chmod 700 /home/devops/.ssh' -k #给权限
在nodeb 172.25.254.217中可以看查看权限和拥有者
ls -ld /home/devops/.ssh
ssh-keygen #生成密钥
ansible westos -m copy -a 'src=/home/devops/.ssh/id_rsa.pub
dest=/home/devops/.ssh/authorized_keys mode=0600 owner=devops group=devops' -k
#远程传输刚才生成的密钥 src是复制的地方,dest是复制到哪里
ssh -l devops 172.25.254.217 #连接清单组中包含的ip时,不需要输入密码
logout #退出devops用户身份
ansible westos -m ping
ansible westos -m shell -a 'touch /mnt/file{1..10}' #给单组中包含的ip建立文件
在nodeb:172.25.254.217中
cd /mnt
ls #可以看到刚才建立的10个文件