实验主机: 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界面与用户交互的执行工具
Vim /etc/ansible/hosts
补充--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 <host-pattern> [-m module_name] [-a args] --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 root@192.168.60.46 ssh-copy-id -I /root/.ssh/id_rsa.pub root@192.168.60.56
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看帮助
补充---模块超级多ansible-doc -l
---以下的模块都需要好好了解 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 (检查错误
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