Ansible 安装文档
控制端 | 192.168.174.143 |
---|---|
被控端 | 192.168.174.144 |
被控端 | 192.168.174.145 |
被控端 | 192.168.174.146 |
被控端 | 192.168.174.147 |
EPEL源yum安装
bash
ansible 官网: https://docs.ansible.com/ansible/latest/
yum install epel-release #ansible在epel源里
yum info ansible #查看信息
which ansible
file /usr/bin/ansible-2.7 #查看文件信息
ansible --version #查看版本
yum -y install ansible libselinux-python
配置文件
bash
vi /etc/ansible/ansible.cfg
# 在[defaults]是配置文件的一个节头,表示以下所有配置项都属于 defaults 节。没有新增
[defaults]
log_path = /var/log/ansible.log 取消注释
取消SSH主机验证(首次登录输yes)
host_key_checking = False 取消注释
生成密钥
bash
ssh-keygen -t rsa #在/root/.ssh/目录下生成秘钥
#被控端:(复制主机端公钥到被控端)
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.75.128
#本机也要操作
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.75.130
# 主机清单列表可以指定任何位置 如下:
vim /root/hosts
[xixi]
192.168.174.144
192.168.174.145
# 执行root下的主机清单时需要 -i 指定位置 如下:
ansible -i /root/hosts xixi -m shell -a 'ls /'
vim /etc/ansible/hosts //主机清单
[ceshi] # 按组分
192.168.174.144
192.168.174.145
192.168.174.146
192.168.174.147
[test]
192.168.174.[144:147] # 表示144-147内的ip
[web:vars] # 给web组定义一个公共变量,即使没有复制公钥,也可以管理
ansible_port=22
ansible_password='123456'
ansible_user='test'
[web]
192.168.174.144
192.168.174.145
[haha] # 单独给某个组的机器配置端口和密码,如果后面不跟着ansible_user 参数的话,默认是root
192.168.174.146 ansible_port=22 ansible_password='123456' ansible_user='root'
192.168.174.147
命令使用如下:
ansible ceshi -m shell -a 'ls /root'
ansible web -m shell -a 'touch 1.txt && ls -lh' #在 test用户下创建文件
-rw-rw-r--. 1 test test 0 11月 27 13:41 1.txt
执行过程
- 加载自己的配置文件(默认/etc/ansible/ansible.cfg)
- 加载自己对应的模块(默认command)
- 将模块或命令生成临时py文件,并将该文件传至被管理用户(在$HOME/.ansible/tmp/)
- 给临时文件执行权限(+x)
- 执行并返回结果
- 删除临时py文件,退出
相关文件
/etc/ansible/ansible.cfg
主配置文件/etc/ansible/hosts
主机清单/etc/ansible/roles/
角色存放目录
相关工具
/usr/bin/ansible
主程序,临时命令工具/usr/bin/ansible-doc
查看配置文档/usr/bin/ansible-galaxy
下载、上传代码货Roles模块到官网平台/usr/bin/ansible-playbook
定制自动化任务/usr/bin/ansible-pull
远程执行命令工具/usr/bin/ansible-vault
文件加密工具/usr/bin/ansible-console
基于Console界面与用户交互的执行工具
利用ansible
实现管理的主要方式
Ad-Hoc
即利用ansible
命令,主要用于临时命令使用场景Ansible-playbook
主要用于长期规划好的,大型项目的场景
命令
ansible-doc
bash
#用来显示模块帮助
ansible-doc [options] [module...]
-l, --list #列出可用模块
-s, --snippet #显示指定模块的playbook片段
例:
ansible-doc -l
ansible-doc -s ping
ansible
bash
ansible <host-pattern> [-m module_name] [-a args]
--version #显示版本
-m module_name #指定模块,默认为command
-V #详细过程 -VV -VVV更详细
--list-hosts #显示主机列表,可简写 --list
-k, --ask-pass #提示输入ssh连接密码,默认key验证
-C, --check #检查,并不执行
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-u, --user=REMOTE_USER #执行远程执行的用户
-b, --become #代替旧版的sudo切换
--become-user=USERNAME #指定sudo的run as用户,默认为root
-K, --ask-become-pass #提示输入sudo时的口令
# 查看目前所有主机
ansible all --list
# 注:
sudo免密时,命令后面加-b即可,不免密需要加-K手动输入密码
# 例:
ansible x86_7_test -m shell -a 'mkdir /data{1..12}' -b