ansible

ansible介绍

ansible是一个同时管理多个远程主机的软件,必须是任意可以通过ssh登录的机器
ansible通过ssh协议实现了管理节点和被管理节点之间的通信,可以实现批量文件分发,批量数据复制,批量自动化安装、服务启停

ansible的特点

模块化:调用特定的模块完成特定的任务;资源部署方便(基于python(paramiko模块以及PyYAML模块)和ssh)
使用yml配置文件语法,功能强大
无需安装被管理节点的客户端,不需要占用客户端的其他端口,仅仅使用ssh服务即可
幂等性:一个任务执行一遍和执行n遍的效果是一样的,不因重复执行带来意外情况

ansible原理架构

ansible架构

1,准备3台linux虚拟机,设置好静态ip
master:192.168.173.139--管理机器
node2: 192.168.173.141--被管理机器
node3: 192.168.173.140--被管理机器
被管理机器上配置好ssh服务、关闭防火墙
2,准备ansible管理机器
yum install epel-release -y
yum install ansible -y
检查ansible是否安装完成
rpm -qa ansible |grep -E '^/etc|^usr/bin'
检查ansible版本
ansible --version
3,被管理机器上
安装ansible所需的系统模块
yum install epel-release -y
yum install libselinux-python -y

ansible管理方式

1,传统的输入ssh密码验证
2,密钥管理

配置好ansible的配置文件,添加被管理机器的ip或者主机名
1,备份现有的配置文件
cp /etc/ansible/host /etc/ansible/host.ori
2,添加ansible需要管理的机器
vim /etc/ansible/ansible.cfg#在最下面添加
[lanqing]
192.168.173.140
192.168.173.141

ssh密码认证方式管理机器
ansible直接利用linux本地的ssh服务,以及一些远程的ssh操作,一般情况下客户端的ssh服务默认都是开启的;
1,在管理机器执行命令
ansible 主机列表 -m(指定功能模块,默认就是command模块) command -a(告诉模块要执行的参数) ‘要执行的命令’ -k(询问密码验证) -u(指定运行的用户) root
2,如上操作一般默认下会有错误提示,需要手动ssh对·主机进行一次连接,即可使用ansible命令操作了
报错ssh root@192.168.173.140
ssh root@192.168.173.141
之后就能发现两个都连通了在这连通之后里插入图片描述
配置免密登录
1,可以在/etc/ansible/hoss文件中,定义好密码即可,实现快速的认证,远程管理主机 参数: ansible_host主机地址 ansible_port端口,默认22 ansible_user认证的用户 ansible_ssh_pass用户认证的密码
使用hosts文件的参数形式来实现ssh认证
修改host文件
添加参数这里插入图片描述
此时命令行就不需要输入密码了
在这里插入图片描述2,ssh密钥方式批量管理主机(比hosts文件的密码参数更安全 ![ssh-keygen的参数](https://img-blog.csdnimg.cn/1aeb213339484a1fa144ab0796525f94.png)在管理主机上创建密钥对ssh-keygen -f ~/.ssh/id_rsa -P " " &> /dev/null`
检查公私钥
公钥私钥存放位置

编写公钥分发脚本

#!/bin/bash
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" &> /dev/null
#-P指定输入的私钥的密码为空,省略输入密码
SSH_Pass=123456
Key_Path=~/.ssh/id_rsa.pub#公钥的路径
for ip in 140 141
do
    sshpass -p$SSH_Pass ssh-copy_id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.173.$ip
done
#非交互式分发公钥命令需要使用sshpass指定ssh密码,通过-o StrictHostChecking=no跳过ssh连接确认,ssh-copy-id可以将公钥填充到一个远程机器上的authorized_keys文件中,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限

ansible的模式与命令

ansible实现批量化主机的模式主要有两种
1,利用ansible纯命令实现的批量管理,ad-hoc模式
2,利用ansible的playbook剧本实现批量管理

ad-hoc模式
ansible的ad-hoc模式是ansible的命令行形式,可以临时批量查看被管理主机的内存、cpu、网络情况;临时的分发配置文件
playbook模式
ansible的playbook模式针对比较具体且比较大的任务;


ad-hoc命令解释
使用ansible-doc命令可以列出ansible支持的模块(ansible-doc -s 模块名可以查看某个模块具体信息)
ansible–自带的提供的命令操作
lanqing–/etc/ansible/hosts文件中定义的主机组,还可以写ip地址,以及通配符
-m command–ansible的指定模块参数,指定了command模块
-a–指定给command的参数

ansible模块
coomand模块:在远程节点上执行命令,默认模块(不能出现shell变量和特殊符号)
chdir 在执行命令之前先通过cd加入该参数指定的目录;
creates在创建一个文件之前判断该文件是否存在,不存在则新建
free_from该参数可以输入任何的操作系统命令,实现远程执行和管理;
removes判断一个文件是否存在,如果存在则执行前面的动作,如果不存在则跳过动作
warn参数,是否提供告警信息
[root@master ~]# ansible lanqing -m command -a “chmod 000 /etc/hosts warn=false”
192.168.173.141 | CHANGED | rc=0 >>
192.168.173.140 | CHANGED | rc=0 >>

shell模块:在远程机器上执行命令,批量远程执行脚本
在这里插入图片描述
scripts模块:把管理机器上的脚本远程传输到被管理机器上运行,比起shell和scripts模块功能更强大
在这里插入图片描述

sudo以超级管理员或者其他人的身份执行命令
1,管理员需要先授权(修改/et/sudoers文件)
2,普通用户以sudo形式执行命令
授权格式:
用户或组 主机列表=(提权身份) [NOPASSWD]:命令列表
多个命令用逗号分割,命令需要写绝对路径(which 命令可以查看绝对路径)
在所有被管理主机上配置sudo,让alice可以管理系统服务
ansible all -m lineinfile -a "path=/etc/sudoers line ='alice ALL=(ALL) /usr/bin/systemctl'"
ssh alice@node1
sudo systemctl restart chronyd

剧本–playbook

本质就是使用模块+yml格式
在这里插入图片描述

具体书写注意事项:
同一层级的内容对齐
不同层级的通过两个空格对齐
不能使用tab键
在这里插入图片描述
执行剧本:ansible-playbook -i host 01.touch.yml -C
-C是–check检查剧本有没有问题
检验使用ansible -i host all -a 'ls -l /tmp/oldboylinux.cn'

定时任务修改剧本格式
根据模块改成剧本格式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值