实验主机:
Master:192.168.60.36
Slave1:192.168.60.46
Slave2:192.168.60.56
测试环境做实验、基于gnome环境安装的centos7、且关闭了iptables、selinux(iptables -F ;setenforce 0)
rpm包安装: EPEL源 yum install ansible
rpm -ql
配置文件:
/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 只是一个工具所以改完配置文件立即生效
选择对46,56的主机进行操作,可以对ansible主机操作,为了效果不加入操作组
Vim /etc/ansible/ansible.cfg
Ansible的配置文件,建议修改下面几项,自己有需要在自己改
[defaults]
host_key_checking = False #检查对应服务器的host_key,建议取消注释不用输入yes,方便操作
log_path=/var/log/ansible.log #日志文件、启用日志功能
module_name = command #默认模块
Ansible
支持tab补全的7非常nice
ansible
--version 显示版本
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写 --list
-k, --ask-pass 提示输入ssh连接密码,默认Key验证
-K, --ask-become-pass 提示输入sudo时的口令
-C, --check 检查, 并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-b, --become 代替旧版的sudo 切换 (授权sudo
--become-user=USERNAME 指定sudo的runas用户,默认为root
Ansible-doc -l (列出所有模块
Ansible-doc ping (查看ping模块的用法
ansible websrv -m ping
补充--失败原因是因为,ansible主机之间默认通过ssh链接的,没有输入密码,登腿啊
ansible websrv -m ping -k
(我设置的密码都是相同的方便,自己也可以试试不同密码
Ansible websrv -a ‘tail /etc/passwd’-k
补充--前面修改了ansible的配置文件的默认模块,所以不用 -m shell,可以ansible-doc shell查看怎么用的,由于每次输入密码过于麻烦,且是ssh通信,配了一个key的验证,方便操作了好多
ssh-keygen (简单化,默认也是那个算法那个路径
ll .ssh
ssh-copy-id -I /root/.ssh/id_rsa.pub [email protected]
ssh-copy-id -I /root/.ssh/id_rsa.pub [email protected]
Ansible websrv -a ‘tail /etc/passwd’
这个操作起来就舒服多了
Ansible websrv -a ‘hostname’-u wang -k
两个主机的wang用户密码一样
Ansible websrv -m script -a ‘/root/f1.sh’
使用script模块直接在远程主机上,跑本地脚本,ansible-doc script看帮助
---以下的模块都需要好好了解
Copy:从主控端复制文件到远程主机
Fetch:从远程主机提取文件至主控端,copy相反,目录可先tar
File:设置文件属性 (单个文件
Hostname:管理主机名
Cron:计划任务(配置chrony主机
Yum:管理包
Service:管理服务
User:管理用户
Group:管理组
ansible命令执行过程
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
- 给文件+x执行
- 执行并返回结果
- 删除临时py文件,sleep 0退出
执行状态: /etc/ansible.cfg
绿色:执行成功并且不需要做改变的操作
×××:执行成功并且对目标主机做变更
红色:执行失败
ansible的Host-pattern 匹配主机的列表支持通配符和与(:&)或(:)非(:!)
ansible系列命令
ansible-galaxy
--连接 https://galaxy.ansible.com 下载其他作者写好的roles
ansible-galaxy list 列出所有已安装的galaxy
ansible-galaxy install geerlingguy.redis 安装galaxy
ansible-galaxy remove geerlingguy.redis 删除galaxy
ansible-playbook 执行playbook
示例:ansible-playbook hello.yml (缩进2字符,执行.yml文件
cat hello.yml
#hello world yml file
- hosts: websrvs (针对主机
remote_user: root (使用对象
tasks: (任务- name: hello world ( 名字
command: /usr/bin/wall hello world (执行的命令
ansible-playbook -C hello.yml (检查错误
- name: hello world ( 名字
ansible-vault 功能:管理加密解密yml文件
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml 查看
ansible-vault edit hello.yml 编辑加密文件
ansible-vault rekey hello.yml 修改口令
ansible-vault create new.yml 创建新文件
Ansible-console:2.0+新增,可交互执行命令,支持tab