自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一、概述分析

由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行
大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下。这时,部署自动
化运维就可以尽可能安全、高效地完成这些工作。
一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于
专用的ABem程序来完成管理功能,如: Puppet、Func、 Zabbix等;另外一类是不需
要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible、 Fabric等。

-

下面介绍几款功能类似的自动化运维工具:

1. Puppet

Pup基于Rpy开发,支持Linx、UNDX、 Windows平台,可以针对用户、系统服务
配置文件、软件包等进行管理,有很强的扩展性,但远程执行命令相对较弱。

2. SaltStack

CallStack基于 Python开发,允许管理员对多个操作系统创建统一的管理系统,比
pet更轻量级

工具 开发语言 结构 配置文件 格式 运行任务
Ansible Python YAML 支持命令行
SaltStack Python C/S YAML 支持命令行
Puppet Ruby C/S Ruby语法格式 通过模块实现

Ansible
Ansible基于 Python开发,集合了众多优秀运维工具的优点,实现了批量运行命令
部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需
部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台
主机并行管理,使得管理主机更加便捷。

    官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。

Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。

Ansible跟其他IT自动化技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提供一个统一的界面来协调所有的IT自动化功能,因此Ansible的系统更加易用,部署更快。
Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执行。IT自动化可以降低技术门槛及对传统IT的依赖,从而加快项目的交付速度。

Ansible基本架构由六个部分组成:

Ansible core 核心引擎
Host inventory 主机清单:用来定义Ansible 所管理的主机,默认是在Ansible的host配置文件中定义被管理主机,同时也支持自定义动态主机清单和指定其他配置文件的位置。
Connection plugins连接插件:负责和被管理主机实现通信。除支持使用ssh连接被管理主机外, Ansible还支持其他的连接方式,所以需要有连接插件将各个主机用连接插件连接到 Ansible。
Playbooks(yaml, injaz2)剧本:用来集中定义 Ansible任务的配置文件,即将多个任务定义在一个剧本中由 Ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务。
Core modules核心模块:是 Ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定的状态。
Custom modules自定义模块:用于完成模块功能的补充,可借助相关插件完成记录日志、发送邮件等功能。

-

ansible功能特性

  • 应用代码自动化部署
  • 系统管理配置自动化
  • 支持持续交付自动化
  • 支持云计算,大数据平台环境
  • 轻量级,无序在客户端安装agent,更新时只需在控制机上进行更行即可
  • 批量任务执行可以写成脚本,不用分发到远程就可以执行
  • 支持非root用户管理操作,支持sudo
  • 使用python编写,维护更简单

二、Ansible安装

Ansible 自动化运维环境由控制主机与被管理主机组成,由于Ansible是基于SSH协议进行通信的,所以控制主机安装Ansible软件后不需要重启或运行任何程序,被管理主机也不需要安装和运行任何代理程序。

实验安装环境:

角色 主机名 IP地址 组名
控制主机 01 192.168.100.129
被管理主机 02 192.168.100.128 webserver
被管理主机 03 192.168.100.130 mysql

三台主机关闭防火墙:

[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0

安装步骤:

控制主机安装ansible并生成密钥对批量发送给被管理主机

1.yum安装环境包与ansible:

yum install epel-release -y
yum install ansible –y

2.查看ansible版本

[[email protected] ~]# ansible  --version

3.yum安装完成后会生成3个文件

[[email protected] ~]# cd /etc/ansible/
[[email protected] ansible]# ls

4.配置被管理端主机IP清单

[[email protected] ansible]# vim /etc/ansible/hosts                     //配置主机清单

5.虽然ansible的配置文件已经设置完成被管理端的IP地址,但是因为ansible是基于ssh协议,所以还需要配置密钥对验证

[[email protected] ~]# ssh-keygen -t rsa           //生成密钥对


6.ssh协议免交互代理

[[email protected] ~]# ssh-agent bash
[[email protected] ~]# ssh-add

shell脚本批量发送公钥

(1).下载安装expect

[[email protected] .ssh]# yum install expect -y                   //yum安装expect

(2). ping通所有可互通的主机

[[email protected] .ssh]# ansible all -m ping       //使用ansible中的ping模块

ansible是基于SSH协议,所以可以ping通的主机储存在.ssh/known_hosts的文件当中。

[[email protected] ~]# cd ~/.ssh/
[[email protected] .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[[email protected] .ssh]# vim known_hosts                   //查看下已经记录在SSH协议的主机,不做任何修改操作

(2).编写shell脚本实现批量推送公钥

[[email protected] .ssh]# cd ~
[[email protected] ~]# chmod 777 .ssh/                  //更改  .ssh/  的权限,有利于后面脚本的执行
[[email protected] .ssh]# vim ~/.ssh/pushssh.sh 

脚本如下:

#!/bin/sh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
host1=`cat known_hosts | awk -F " " ‘{print $1}‘`

for i in $host1;

do

command1="scp ~/.ssh/authorized_keys [email protected]$i:~/.ssh/authorized_keys"

password="123123" 

/usr/bin/expect -c "
        spawn ssh-copy-id [email protected]$i
        expect {
        \"*password\" { send \"$password\r\"; exp_continue }
        }
expect eof"

done

#编写脚本完成后保存退出

[[email protected] .ssh]# sh pushssh.sh        //执行脚本

PS:想要执行这个脚本,首先需要下载安装expect,并且把 .ssh/ 的权限放到最大便于shell脚本的执行。

----------------------验证-------------------

查看下脚本是否执行成功:


此时就可以进行ansible批量部署操作

[[email protected] ~]# ansible all -m command -a ‘date‘

原文地址:http://blog.51cto.com/13767783/2308559

时间: 2024-08-06 20:07:22

自动化运维Ansible批量部署服务+shell脚本批量推送公钥的相关文章

自动化运维之Cobbler部署系统

一 .Cobbler简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP.DNS.yum仓库.构造系统ISO镜像. Cobbler支持命令行管理,web界面管理,还提供了API接口,方便二次开发 Cobbler客户端Koan支持虚拟机安装和操作系统重新安装,使重装系统更便捷. Cobbler提供的功能 使用C

Linux运维系统工程师系列之shell脚本一则小随笔

shell随笔 一.   学好shell编程的知识储备 前面讲过,给大家留作业Linux系统命令应用: Vi/vim 编辑器的熟练使用,SSH客户端软件的设置: 基础的服务,系统服务ntp,crond,网络服务:nfs,rsync,inotify,sersync,ssh,lanmp. 补充:清空日志的三种方法: echo  " " > filename.log >filename.log cat  /dev/null > filename.log 注:工作中有的时候不

面试linux运维一定会问到Shell脚本这24个问题

面试linux运维一定会问到Shell脚本这24个问题 虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是会问到 shell 脚本的问题,它有助于你在工作环境中自动完成很多任务. 如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Sh

自动化运维之详细部署安装Ansible服务(超简单)

简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: 1. 连接插件connection plugins:负责和被监控端实现通信: 2. host inventory:指定操作的主机,是

Linux下的自动化运维ansible工具

什么是自动化运维     随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分.面对越来越复杂的业务, 面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷.安 全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等).从初期的 几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术.业务.管理等方面的要求,那么标 准化.自动化.架构优化.过程优化等降低IT服务成本的因素越来越被人们所重视.其中,自动化最开始作

自动化运维Ansible之Playbook剧本(持续更新)

附上前两篇关于Ansible的博客地址,以供查阅,欢迎学习交流!自动化运维之Ansible概述及Ansible部署Ansible命令应用之常用模块 Playbook简介 playbook是ansible用于配置,部署,和管理被控节点的剧本. 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态.playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成. 也可以这么理解,playbook 字面意思,即剧本,现实中

3.2 企业自动化运维ansible

ansible的Host-pattern ansible的Host-pattern 匹配主机的列表All :表示所有Inventory中的所有主机 ansible all –m ping:通配符 ansible "" -m ping 这个"*"号相当于all全部主机 ansible 192.168.1.* -m ping ansible "*srvs" -m ping 或关系 ansible "websrvs:appsrvs"

自动化运维Ansible实践(一)

第 1 章 Ansible概述 1.1 IT自动化的好处1.1.1 团队影响? 节省时间,提高工作效率? 消除重复任务? 更少的错误风险? 改善协作和工作满意度1.1.2 企业影响? 克服复杂性? 更多创新资源? 加强问责制和合规性1.2 Ansible是什么Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境.Ansible也是一种简单的自动化语言,可

自动化运维Ansible之常用模块

目录 0.Ansible模块语法 1.Command模块 2.Shell模块 3.Scripts模块 4.Copy模块 5.File模块 6.Yum模块 7.Service模块 8.Cron模块 9.Group模块 10.User模块 11.Mount模块 12.Unarchive模块 13.Git模块 14.Systemd模块 0.Ansible模块语法 在ansible中是指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令则为playbook 查看模块帮助:ansible-doc