A.ansible的作用:用一台主机对多台主机进行控制。
搭建实验环境,至少搭建三台主机
两台受控主机不需要做什么
主控机用真机
firewall-cmd --add-masqueradd
Init 3 关闭图形
用ansible主机来控制其他两台主机
在安装ansible时,要搭建epel源。
在rhel8 epel网页找网址
wget 网址下载下来
rpm -ivh 软件包
cd /etc/yum.repos.d
ls
dnf search ansible
dnf install ansible.noarch
B.ansible清单,就是管理名单,列表:用一个短的字符串来表示一连串的主机。
按照要管理主机的类别,对主机列成清单,对受控主机进行管理。
在系统中ansible的默认配置文件
rpm -qc ansible
#查看配置文件
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/hosts #全局清单,针对所有用户都生效的清单
写清单
#单层清单
[westos] #用[]括起来,表示是个列表
172.25.254.100
172.25.254.200
[linux]
172.25.254.50
#嵌套式清单
[test:children] #当我使用test清单的时候,代表的是两个子清单
westos
linux
#清空历史命令
history -c
ansible all --list-hosts #查看受控主机ip
ansible 列表名称 --list-hosts #查看列表名称的ip
主机的规范化表示名称
172.25.254.[1:10] #表示1到10的10台主机
ansible命令中指定清单的正则表达式
#例子
vim /mnt/westos
node[1:10].westos.org
ansible -i /mnt/westos all --list #-i表示指定清单
vim /mnt/westos
westos.westos.org
node[1:10].westos.org
ansible -i /mnt/westos ungrouped --list #显示不在列表中的主机
*表示所有
172.25.254.*
westos*
:表示逻辑或
:&表示逻辑与
ansible 'westos:&linux' --list-hosts
:!逻辑非
ansible 'westos:!linux' --list-hosts
~以关键字开头
ansible -i /mnt/westos ~node --list #以node开头
~(str1|str2)
ansible -i /mnt/westos ~(node1|node2) --list #以node1或node2开头的
C.ansible配置文件参数详解
ansible 清单中组名称 -m 模块 -u remote_user #模块相当于命令,-u 远程主机的用户,这个用户在远程主机中执行这个模块。
~/.vimrc #编辑这个文件所有的shell都可以用
set nu
/etc/ansible/ansible.cfg ##基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg ##用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg ##优先级最高
#[default] ##基本信息设定
inventory= ##指定清单路径 ,/mnt/westos
remote_user= ##在受控主机上登录的用户名称,未指定使用当前用户。限定远程登录的用户是谁
ask_pass= ##是否提示输入ssh密码。如果公钥登录设定为false
library= ##库文件存放目录
local_tmp= ##本机临时命令执行目录
remote_tmp= ##远程主机临时py命令文件存放目录,主机生成的py文件上传到受控主机的什么目录中。一般情况下是 ~/.ansible/tmp
local_tmp= ~/.ansible/tmp 本机生成py文件的存放目录
forks= ##默认并发数量,ansible一次并发处理的主机数量
host_key_checking= ##第一次连接受管主机时是否要输入yes建立host_key
sudo_user= ##默认sudo用户,我做所有命令的时候,都实行的是sudo命令.并且转换成的用户身份是root。
ask_suso_pass= ##每次在受控主机执行ansible命令时是否询问sudo密码
module_name= ##默认模板,默认使用command,可以修改为shell
log_path= ##日志文件路劲
[privilege_escalation] #身份信息设定
become= ##连接后是否自动切换用户 True
become_method= ##设定切换用户的方式,通常用sudo
become_user= ##在受管主机中切换到的用户,通常为root
become_ask_pass= ##是否需要为become_method提示输入密码,默认为false
ansible westos -m ping -k #k表示输入密码
ansible westos -m shell -a 'hostname' -k #-a表示shell的参数
ansible westos -m shell -a "whoami" -k
ansible westos -m shell -a "whoami" -k -u root #-u指定用户身份,如果没有的话,就用remote_user指定的身份
ansible的运行方式是在本机把命令转换成py脚本,上传到远程主机,然后执行,执行完了,便会自动删除掉。
1.问题:ssh免密
ansible私有配置方法
在ansible的主机上
ssh-keygen ##生成密钥
cd .ssh/
ls
ssh-copy-id -i id_rsa.pub westos@172.25.254.100
ssh-copy-id -i id_rsa.pub westos@172.25.254.200
在两台受控主机上
visudo
westos ALL=(root) NOPASSWD: ALL
vim /etc/ansible/ansible.cfg
become_ask_pass=False
24#ask_sudo_pass = True
ansible westos -m shell -a 'useradd test'
在这其中遇到了问题
wheel ALL=(ALL) ALL注释掉
问题2:有些人想用sudo,有些人想用westos,有些人想用自己的用户
此时:
vim /etc/ansible/ansible.cfg
#remote_user = westos
#become= True ##连接后是否自动切换用户 True
#become_method= sudo ##设定切换用户的方式,通常用sudo
#become_user= root ##在受管主机中切换到的用户,通常为root
#become_ask_pass= Fslse
生成ansible用户自己的配置
在家目录中
cd
ls
mkdir .ansible
cp /etc/ansible/ansible.cfg .
vim /ansible.cfg
14inventory =/root/.ansible/inventory
remote_user = westos
#roles_path = /etc/ansible/roles
host_key_checking = False
module_name = shell
[privilege_escalation]
become= True
become_method= sudo
become_user= root
become_ask_pass= False
tail /etc/ansible/hosts > inventory