一、应用epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
更新缓存
yum clean all
yum makecache
二、安装ansible
查看yum安装的ansible版本
yum info ansible
yum -y install ansible
ansible --version
三、查看ansible的主要文件
rpm -ql ansible | more
rpm -ql ansible | less
四、相关文件
配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性(一般无需修改)
/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 配置文件
Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)
vim /etc/ansible/ansible.cfg
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp # 临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数,同时可以执行5次
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True # 每次执行ansible命令是否询问ssh密码
#ask_pass = True # 每次执行ansible命令是否询问ssh口令
#remote_port = 22 # 远程主机的端口号(默认22)
建议优化项:
host_key_checking = False # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log # 日志文件,建议取消注释
module_name = command # 默认模块
1.安装epel-release YUM 源 yum install epel-release -y
2.安装repolist YUM源 yum repolist -y
3.安装ansible 包 yum install ansible -y
4.检测安装是否成功 rpm -qa|grep ansible
5.查看版本 ansible --version
5.基础知识
配置文件目录:/etc/ansible(ansible.cfg、hosts、roles(自定义或下载的role))
执行文件目录:/usr/bin
Lib库依赖目录:/usr/lib/python2.6/site-packages/ansible
Help文档目录: /usr/share/doc/ansible-2.3.1.0
Man文档目录:/usr/share/man/man1
6.配置ansible
(本机在128主机上安装,控制127电脑)
vim /etc/ansible/hosts
在hosts文件中加入127的主机地址
7.SSH免密钥登录设置
生成公钥/私钥 ssh-keygen -t rsa
8.查看秘钥路径 ls /root/.ssh/
9.入信任文件(将/root/.ssh/秘钥分发到其他服务器,并在所有服务器上执行如下指令):
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.2.128 回车 并输入密码
10.查看是否成功 ls /root/.ssh/
11.测试是否成功 ssh 192.168.2.127
12.检测所有主机的网络状态
1> 默认情况下连接被管理的主机是ssh基于key验证,如果没有配置key,权限将会被拒绝
因此需要指定以谁的身份连接,输入用户密码,必须保证被管理主机用户密码一致
ansible all -m ping -k
2> 或者实现基于key验证 将公钥ssh-copy-id到被管理的主机上 , 实现免密登录
ansible all -m ping
ansible的Host-pattern
匹配主机的列表
All :表示所有Inventory中的所有主机
ansible all –m ping
* :通配符
ansible "*" -m ping (*表示所有主机)
ansible 192.168.1.* -m ping
ansible "*srvs" -m ping
或关系 ":"
ansible "websrvs:appsrvs" -m ping
ansible “192.168.1.10:192.168.1.20” -m ping
逻辑与 ":&"
ansible "websrvs:&dbsrvs" –m ping
在websrvs组并且在dbsrvs组中的主机
逻辑非 ":!"
ansible 'websrvs:!dbsrvs' –m ping
在websrvs组,但不在dbsrvs组中的主机
注意:此处为单引号
综合逻辑
ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping
正则表达式
ansible "websrvs:&dbsrvs" –m ping
ansible "~(web|db).*\.magedu\.com" –m ping
1.文件分发
[root@kht132 ansible]# ansible "192.168.2.133" -m copy -a "src=aa.cfg dest=/kht/aa.kht"
192.168.2.133 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/kht/aa.kht",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1658110594.19-7321-111204726928976/source",
"state": "file",
"uid": 0
}
[root@kht132 ansible]# ansible "web*" -m copy -a "src=aa.cfg dest=/kht/bb.kht"
192.168.2.133 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/kht/bb.kht",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1658110628.72-7531-6176147960609/source",
"state": "file",
"uid": 0
}
192.168.2.134 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.2.134 port 22: No route to host",
"unreachable": true
}
-m 指定要运⾏的模块,⽐如这⾥的 ping 模块和 copy 模块
-a 指定模块的参数, 这⾥模块 ping 没有指定参数。 模块 copy
指定了 src 和 dest 参数