自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机
目录:
一、ansible简介
1.1、ansible是什么
1.2、ansible如何工作
1.3、ansible优缺点
1.4、ansible安装方式
1.5、ansible文件简单介绍
1.6、ansible简单使用
二、ansible-shell简介
2.1、ansible-shell是什么
2.2、ansible-shell安装方式
2.3、ansible-shell简单使用
三、使用ansible的authorized_key模块批量推送公钥到远程主机
3.1、生产秘钥对
3.2、使用ansible-playbook来生成推送公钥
四、相关站点的推荐
废话不多说,开始上干货。。。。
ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。
下面这是摘自36氪的一段介绍,很详细:
AnsibleWorks成立于2012年,由自动化工具Cobbler及Func的开发者Michael DeHaan创建。其Ansible平台是一个开源的配置及计算机管理平台。可实现多节点的软件部署,执行特定任务并进行配置管理。
Ansible 跟其他IT自动化技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提供一个统一的界面来协调所有的IT自动化功能,因此 Ansible的系统更加易用,部署更快。受管理的节点无需安装额外的远程控制软件,由平台通过SSH(Secure SHell)对其进行管理,因此十分方便。其模块支持JSON等标准输出格式,可采用任何编程语言重写。
Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执行。IT自动化可以降低技术门槛及对传统IT的依赖,从而加快项目的交付速度。
目前,Ansible已有30万用户,每月下载量接近3万次。其客户包括AppDynamics、Evernote 、MapR以及金融服务、电信、医疗保健、媒体业的财富500强公司。
免费版:http://www.ansibleworks.com/docs/
对Ansible底层工作机制感兴趣的可以参考这个: http://www.the5fire.com/explore-the-ansible.html
ansible执行过程大体过程如下图,其中暖色调的代表已经模块化。
图片来源于:http://ju.outofmemory.cn/entry/67581
ansible有如下优点:
1.3.1、轻量级,他不需要去客户端安装agent,更新时,只需要在操作机上进行一次更新即可
1.3.2、批量任务执行可以写成脚本,而且不用分发到远程就可以执行
1.3.3、使用python编写的,维护更简单
1.3.4、支持sudo
缺点:
1.3.5、对于几千台、上万台机器的操作,还不清楚性能、效率情况如何,需要进一步了解。
1.4.1、安装前提Control Machine Requirements
Currently Ansible can be from any machine with Python 2.6 installed (Windows isn’t supported for the control machine).
This includes Red Hat, Debian, CentOS, OS X, any of the BSDs, and so on.
Managed Node Requirements
On the managed nodes, you only need Python 2.4 or later, but if you are are running less than Python 2.5 on the remotes, you will also need:
python-simplejson
1.4.2、源码安装1.4.3、pip安装1.4.4、yum安装
1234 [root@ansible ~]#[root@ansible ~]# rpm -qa | grep ansible # 检查是否安装ansible-1.5.3-1.el6.noarch[root@ansible ~]# yum install ansible -y # 没有安装的话,使用这个安装即可
1.5.1、包含文件介绍
123456 [root@ansible ~]# tree /etc/ansible//etc/ansible/├── ansible.cfg # ansible的配置文件└── hosts # ansible的主仓库 用来存储需要管理的远程主机的相关信息0 directories, 2 files[root@ansible ~]#
1.5.2、ansible其他组件介绍ansible-doc 模块文档查看器,很有用,使用ansible -l 显示所有module列表,使用 ansible-doc <module_x> 来查看module_x的详细文档,这里不做太多介绍
ansible-playbook 传说中的配置管理工具,如果你用过puppet或者saltstack,这个可以不用介绍了,如果你没用过,也没关系,花费20分钟看下官方的 Video。 掌握一件事情最好的办法就是使用它,你可以下载官方的example来学习
ansible-galaxy 和三星没关系,你可以把他理解成ansible的pip,可以从galaxy.ansible.com下载官方收录的playbooks
ansible-pull 支持直接从git下载playbook执行,需要遵循其规定的目录格式,用处不是特别大,可以不关注
ansible-vault 如果你的配置文件中含有敏感信息,你可能并不希望他能被人看到,vault可以帮你加密/解密这个配置文件,高级用法,请参照http: //blog.ansibleworks.com/2014/02/19/ansible-vault/
1.5.3、ansible的 Inventory 介绍ansible.cfg文件不用去管,我们只需要配置hosts文件即可,hosts文件也就是官方说的Inventory,hosts文件配置的几种格式:单纯的写主机名或ip,所属组为all
12 #blue.example.com#192.168.100.1定义一个组
1234 #[webservers]#alpha.example.org#beta.example.org#192.168.1.100组成员可以使用通配符来匹配 www[001:006].example.com如果你没有使用公钥,想要使用密码,你也可以这样写(适用于第一次登陆控制)格式:【主机名】 【主机地址】 【主机密码】 默认是root用户来进行的
123 [keepalived]keepalived1 ansible_ssh_host=192.168.146.136 ansible_ssh_pass="test"keepalived2 ansible_ssh_host=192.168.146.137 ansible_ssh_pass="test"
hosts文件设置的参数官方给出的:
1.6、ansible的简单使用
1.6.1、上传公钥到远程主机
定义好了仓库,那么我们就需要把控制端的公钥推送到远程主机上 (稍后会有讲到)
方法:1、使用expect+shell方式批量推送
方法:2、自己手动一个一个的推送
1.6.2、牛刀小试看看效果如何
好了,公钥都传到对方主机了,那么我们来简单的使用来试用下
123456 [root@ansible ~]# ansible keepalived -a "uptime" # 默认使用command模块keepalived1 | success | rc=0 >>13:07:24 up 7:59, 1 user, load average: 0.00, 0.00, 0.00keepalived2 | success | rc=0 >>13:07:31 up 7:58, 1 user, load average: 0.00, 0.00, 0.00[root@ansible ~]#
常用模块:
yum、service、shell、raw
yum模块常用来安装软件
service模块常用来对服务的开关操作
shell模块可以用来执行命令以及脚本
raw和command、shell类似,但是它可以传递管道
123456789101112131415161718192021222324252627282930313233343536373839404142434445 [root@ansible ~]# ansible keepalived -m raw -a "rpm -qa | grep xinetd" # 使用raw模块查看远程服务器上是否安装了xinetd服务keepalived1 | FAILED | rc=1 >>keepalived2 | FAILED | rc=1 >>[root@ansible ~]# ansible keepalived -m yum -a "name=xinetd state=latest" # 使用yum模块进行安装yum源里最新版的xinetd软件keepalived1 | success >> {"changed": true,"msg": "","rc": 0,"results": ["Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * epel: ftp.riken.jp\nSetting up Install Process\nResolving Dependencies\n--> Running transaction check\n---> Package xinetd.x86_64 2:2.3.14-39.el6_4 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n xinetd x86_64 2:2.3.14-39.el6_4 base 121 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package(s)\n\nTotal download size: 121 k\nInstalled size: 259 k\nDownloading Packages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r Installing : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\r Verifying : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\nInstalled:\n xinetd.x86_64 2:2.3.14-39.el6_4 \n\nComplete!\n"]}keepalived2 | success >> {"changed": true,"msg": "","rc": 0,"results": ["Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * epel: mirrors.yun-idc.com\nSetting up Install Process\nResolving Dependencies\n--> Running transaction check\n---> Package xinetd.x86_64 2:2.3.14-39.el6_4 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n xinetd x86_64 2:2.3.14-39.el6_4 base 121 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package(s)\n\nTotal download size: 121 k\nInstalled size: 259 k\nDownloading Packages:\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r Installing : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\r Verifying : 2:xinetd-2.3.14-39.el6_4.x86_64 1/1 \n\nInstalled:\n xinetd.x86_64 2:2.3.14-39.el6_4 \n\nComplete!\n"]}[root@ansible ~]# ansible keepalived -m raw -a "rpm -qa | grep xinetd" # 再次使用raw模块查看xinetd是否安装keepalived1 | success | rc=0 >>xinetd-2.3.14-39.el6_4.x86_64keepalived2 | success | rc=0 >>xinetd-2.3.14-39.el6_4.x86_64[root@ansible ~]# ansible keepalived -m shell -a "service xinetd restart" # 使用shell模块启动xinetd服务keepalived2 | success | rc=0 >>Stopping xinetd: [FAILED]Starting xinetd: [ OK ]keepalived1 | success | rc=0 >>Stopping xinetd: [FAILED]Starting xinetd: [ OK ][root@ansible ~]#[root@ansible ~]# ansible keepalived -m service -a "name=xinetd state=restarted" # 同样你也可以使用service模块进行服务的启动,关闭和重启keepalived1 | success >> {"changed": true,"name": "xinetd","state": "started"}keepalived2 | success >> {"changed": true,"name": "xinetd","state": "started"}[root@ansible ~]#
NOTE:
通俗点说,ansible执行管理的时候分两部分:
1、Ad-Hoc(我们刚才1.6所演示的就是属于Ad-Hoc)
What’s an ad-hoc command?
An ad-hoc command is something that you might type in to do something really quick, but don’t want to save for later.
详情请查看:http://www.ansible.cn/docs/intro_adhoc.html
2、Playbooks
Playbooks are Ansible’s configuration, deployment, and orchestration language. They can describe a policy you want your remote systems to enforce, or a set of steps in a general IT process.
详情请查看:http://www.ansible.cn/docs/#playbooks
项目地址:https://github.com/dominis/ansible-shell
1
2
|
[root@ansible ~]# git clone https://github.com/dominis/ansible-shell.git
[root@ansible ~]# pip install -e ./ansible-shell
|
2.3、ansible-shell简单使用
ansible-shell内置的命令主要有四个:
cd : 切换到指定的组/表达式筛选的机器集合上
list: 显示目前的机器集合,list groups 可以列出所有的组(对我们可能没啥用)
serial: 运行时的并发度,默认是2
help: 顾名思义,他能生成简单的模块帮助信息,方便即时查询
当然,ansible-shell的功能不止这些,这里只是做下简单的演示而已,我们后期会继续更新相关内容
如果你python不错的话,可以在ansible-shell的基础上进行修改,更新,确保更加适合你的环境。
好 了,ansible和ansible-shell大致讲解了一下,“知道的越多,肩上的责任越重“,随之而来是你如何在一个很大的环境中来使用 ansible,因为ansible是依托于ssh的,难到你要手动的去ssh-copy-id到几十台,几百台甚至上千台机器上么,估计等你公钥都传完 了,早已经过了项目上线的时间,在这里我们使用ansible来进行公钥的批量推送,以下几个是我个人思路,如果你有更好的方式请告知
1、shell 脚本 + expect
2、scp 脚本 + expect + 修改authorized_keys文件权限
3、ansible直接推送脚本
个人感觉:
第一个坑:1和2两条的主要问题是,第一次ssh到远程主机上的时候,远程主机会对你进行公钥验证,所以这是一个坑,
第二个坑:针对scp上传之后,文件不对又是另外一个坑
第三个坑:如果只是简单的使用expect的话,remote host主机密码要统一,不统一的话又是一个大坑
第四个坑:使用ansible推送公钥的话,第一次操作需要把远程主机的信息,账户,密码都写到host文件中去,这是一项大的工程
废话不多说,我们继续上干货
三、使用ansible的authorized_keys模块+yaml实现批量上传公钥
这个命令会产生一个公钥(~/.ssh/id_rsa.pub)和密钥(~/.ssh/id_rsa),
-t dsa:表示使用密钥的加密类型,可以为'rsa'和'dsa'
-P '':表示不需要密码登录
-f ~/.ssh/id_dsa:表示密钥存放的路径为${USER}/.ssh/id_dsa
ssh-copy-id -i ~/.ssh/id_rsa.pub username@[ip,hostname] #如果你是单台机器的话,可以使用这种方式把公钥文件传递到对方主机

无图无真相,来看看我们已经做好的一台ansible机器上来罗列远程主机上的authorized_keys的权限,如果你的机器不行,那就改为600即可

3.2、使用ansible-playbook来生成推送ymal文件
authoried_keys模块参数介绍

修改ansible的hosts(Inventory)文件,如下图所示,格式:
[主机名] [ssh连接账户] [ssh主机地址] [ssh连接账户对应的密码]

下面演示我们使用ansible-playbook来推送我们写好的ymal文件
再次查看hosts文件内容
到了这里你可以对着大片的服务器说,管理你们so easy,从此你不用在为不会except而发愁,解放你的双手,让你更从容,更快速便捷的来管理你的服务器群组!如果你会python,那就是如虎添翼了!
四、相关站点的推荐
国内一个团队把1.3的官方文档全部移过来了,从此你再也不用担心阅读官方文档被墙了,感谢他们。。。
对应官方的1.3版本的手册:http://www.ansible.cn/docs/
想要了解yaml的同学可以移步到这里:
YAML的官方网站:http://www.yaml.org
后续主要针对ansible-playbook对线上环境的使用博客,敬请关注
参考文章:
http://www.kankanews.com/ICkengine/archives/136988.shtml
http://www.shencan.net/index.php/2014/04/10/ansible-好***-ansible-shell/
https://github.com/dominis/ansible-shell
https://linuxtoy.org/archives/hands-on-with-ansible.html
https://github.com/ansible/ansible
http://www.the5fire.com/explore-the-ansible.html
http://ju.outofmemory.cn/entry/67581


自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机的更多相关文章
- Ansible自动化运维工具及其常用模块
Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...
- 自动化运维工具Ansible详细部署 (转载)
自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...
- 自动化运维工具之 Ansible 介绍及安装使用
一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...
- Linux实战教学笔记25:自动化运维工具之ansible (一)
第二十五节 ansible之文件的批量分发 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转 ...
- 自动化运维工具——ansible详解(一)
ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...
- 企业级自动化运维工具应用实战-ansible
背景 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运 ...
- 项目实战10.1—企业级自动化运维工具应用实战-ansible
实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...
- 自动化运维工具Ansible的部署步骤详解
本文来源于http://sofar.blog.51cto.com/353572/1579894,主要是看到这样一篇好文章,想留下来供各位同僚一起分享. 一.基础介绍 ================= ...
- Ansible自动化运维工具使用
概述本文描述自动化运维工具 Ansible 的安装及基础使用方法,包含: Centos 下的安装主机配置Ad-Hoc command(命令行执行)Playbook (任务剧本)Ansible 和 Sa ...
随机推荐
- 总结Spring、Hibernate、Struts2官网下载jar文件
一直以来只知道搭SSH需要jar文件,作为学习的目的,最好的做法是自己亲自动手去官网下.不过官网都是英文,没耐心一般很难找到下载入口,更何 况版本的变化也导致不同版本jar文件有些不一样,让新手很容易 ...
- asp.net cache 缓存
就是希望让Web应用程序从一开始运行到结束都一直存在,有人就说为什么不用Application呢?其实Cache是可以一段时间内自动更新数据的,而Application就无法做成这样的,另外Appli ...
- Python画图笔记
matplotlib的官方网址:http://matplotlib.org/ 问题 Python Matplotlib画图,在坐标轴.标题显示这五个字符 ⊥ + - ⊺ ⨁,并且保存后也能显示 h ...
- wtforms 使用
wtforms是一个表单模板库, 下面以修改密码表单为例简单说明其用法. 我们可以用python代码定义form的基本元素, 比如用户名/邮箱, 并给定各个元素的validation条件. 然后在re ...
- 怎样给WordPress分配更多的内存
WordPress如果内存不够,你在操作的时候,就会碰到像这样的问题”Allowed memory size of xxxxxx bytes exhausted”(允许的内存 xxxx 字节已经用光了 ...
- 【C语言入门教程】5.4 递归
递归函数 是能够直接或通过另一个函数间接调用自身的函数,调用自身的方法称为递归调用.递归调用的本质是使用同一算法将复杂的问题不断化简,直到该问题解决. 例如求斐波那契数列的某一项算法适用于递归函数实现 ...
- Swift---TextView用法
1.TextView放在一个NSScrollView中,作为documentView存在. @IBOutlet weak var txtScrollView: NSScrollView! 2.在Tex ...
- java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)
(1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...
- Code First03---CodeFirst根据配置同步到数据库的三种方式
上一节我们说到使用Fluent API对实体的配置,但是有一个问题了,在业务中我们可以用到的实体很多,那是不是每个都需要这样去配置,这样就造成我们重写的OnModelCreating方法很庞大了.所以 ...
- 解决Eclipse中文乱码
http://hsj69106.blog.51cto.com/1017401/595598 使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件 ...