ansible软件介绍

python语言是运维人员必会的语言!

 ansible是一个基于Python开发的自动化运维工具!(saltstack)

 其功能实现基于SSH远程连接服务!

 ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能

05 ansible软件特点

不需要单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端。

 不需要服务端(no servers)。

 需要依靠大量的模块实现批量管理。

 配置文件/etc/ansible/ansible.cfg,不用配置

ansible软件部署条件

基于ssh秘钥进行ansible软件部署

ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31

01. 无法批量执行,因为需要进行交互

a 需要问你是否yes

ssh -o StrictHostKeyChecking=no     --- 表示不管询问我什么信息,我都随便都可以

ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.31"

7 不加双引号

Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.

root@172.16.1.31's password:

b 需要问你密码信息

yum install sshpass -y

sshpass - noninteractive ssh password provider

采用非交互方式提供ssh密码信息

[root@m01 scripts]# sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31

Now try logging into the machine, with "ssh '172.16.1.31'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.31"     可以加 -f

02. 被管理主机如果修改了默认端口,无法进行分发公钥

vim /usr/bin/ssh-copy-id

ssh $1 172.16.1.31 "exec sh -c 'cd; umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys >/dev/null 2>&1

cd               切换到当前用户家目录下面

umask 077        666-077=6-1-1=600

test -d .ssh || mkdir .ssh   进行目录创建

ssh-copy-id -i /root/.ssh/id_dsa.pub "-p52113 172.16.1.41"

ssh-copy-id $1 $2 $3

shift    一旦脚本中执行了shift,就会将传参的参数向前推送一位

shift    1 2 3 4 5

shift    2 3 4 5

shift    3 4 5

shift    4 5

shift    5

vim shift_test.sh       <-- 测试shift命令脚本

#!/bin/bash

until [ $# -eq 0 ]

do

echo $*

shift

done

a 自动设定秘钥保存路径

-f filename

Specifies the filename of the key file.

b 自动设定私钥密码信息

-P passphrase

Provides the (old) passphrase.

-N new_passphrase

Provides the new passphrase.

### 最终批量分发公钥脚本

[root@m01 scripts]# cat fenfa.sh fenfa_check.sh

#!/bin/bash

# create keys pair

\rm -f /root/.ssh/id_dsa*

ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" –q             优化创建密钥

Pass_info=123456

#Port_info=52113

# fenfa keys_pub

for ip in 31 41 7

do

sshpass -p${Pass_info} ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"                                              优化推送密钥

done

#!/bin/bash

cmd=$1

#Pass_info=123456

#Port_info=52113

if [ $# -ne 1 ];

then

echo "pls input one cmd"

exit 1

fi

# fenfa keys_pub

for ip in 31 41 7

do

echo === 172.16.1.$ip info ===

ssh 172.16.1.$ip $cmd

echo === end ===

echo ""

done

ansible软件部署流程

服务端m01   a ansible软件安装在管理主机端

yum install -y ansible

说明:ansible软件需要依赖epel源

客户端  其他 b ansible受控主机端进行安装

yum install libselinux-python -y

c ansible配置管理文件配置

# tail -5 /etc/ansible/hosts

[oldboy]

172.16.1.31

172.16.1.41

172.16.1.7

ansible命令语法说明

ansible oldboy -m command -a "uptime"   <-- 实现批量管理

# ansible软件需要掌握的两个部分

a ansible软件模块

全部模块信息查看

ansible-doc -l|wc -l

ansible模块知识总结

command模块

ansible oldboy -m command -a "uptime"

chdir      Change into this directory before running the command.

在执行命令前,进行切换目录

creates    A filename or (since 2.0) glob pattern, when it already exists, this step will not be run.

判断一个文件是否存在,如果存在就跳过后面命令执行的操作

removes    A filename or (since 2.0) glob pattern, when it does not exist, this step will not be run.

判断一个文件是否存在,如果不存在就跳过后面命令执行的操作

总结:command模块是一个ansible的基本命令模块,但有些特殊字符无法进行输入识别

这个模块是一个默认模块

ping模块(注意利用python脚本,实现远程主机连接测试)

ansible oldboy -m ping

172.16.1.7 | SUCCESS => {

"changed": false,

"ping": "pong"

}

## 在不基于秘钥进行远程管理时,ansible软件可以进行如下配置

vim /etc/ansible/hosts

[oldboy]

172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456

172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456

172.16.1.7  ansible_ssh_user=root ansible_ssh_pass=123456

command模块

chdir

creates

removes

ping模块        测试受控主机连通性

copy   需要利用ansible批量分发文件

src     --- 指定要进行批量复制的源文件或目录信息

dest    --- 指定要进行批量复制的目标文件或目录信息

ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/"  <-- 批量复制文件

ansible oldboy -m copy -a "src=/etc dest=/tmp/"        <-- 批量复制目录

ansible oldboy -m copy -a "src=/etc/ dest=/tmp/"

ansible oldboy -m copy -a "src=/oldboy_dir/1.txt dest=/tmp/lidao.txt"

mode    --- 指定文件批量分发到远程主机上权限信息

owner   --- 指定文件批量分发到远程主机上属主信息

group   --- 指定文件批量分发到远程主机上属属组信息

ansible oldboy -m copy -a "src=/etc/rsync.password dest=/etc/ mode=600 owner=oldboy group=oldboy"

backup  --- 在文件批量分发复制之前,对已存在的文件进行按照时间信息备份

ansible oldboy -m copy -a "src=/etc/rsync.password dest=/etc/ mode=600 owner=oldboy group=oldboy backup=yes"

remote_src=true   --- 如果为true,src信息表示的是远程主机中数据信息,

如果为false,src信息表示的是本地管理主机中数据信息

content           --- 将指定字符串信息,重定向到远程主机文件中

ansible oldboy -m copy -a "content='oldboy666' dest=/etc/rsync.password"

file模块

可以修改文件属性信息,创建目录 创建文件 创建链接

mode    --- 指定文件批量分发到远程主机上权限信息

owner   --- 指定文件批量分发到远程主机上属主信息

group   --- 指定文件批量分发到远程主机上属属组信息

ansible oldboy -m file -a "dest=/tmp/opt/ mode=755"

ansible oldboy -m file -a "dest=/tmp/oldboy/ state=directory"             创建空目录命令

ansible oldboy -m file -a "dest=/tmp/oldboy/01/02/03/04/ state=directory" 创建多级目录

ansible oldboy -m file -a "dest=/tmp/oldboy/01.txt state=touch"  创建空文件

ansible oldboy -m file -a "dest=/tmp/oldboy/ state=absent"       删除文件或目录操作

shell   --- 属于ansible万能模块

实现批量执行脚本功能

1)在管理主机上创建脚本

vim /server/scripts/yum.sh

#!/bin/bash

yum install -y keepalived

2) 将脚本批量分发给多台受控主机

ansible oldboy -m copy -a "src=/server/scripts/yum.sh dest=/server/scripts/ mode=655"

3) 批量执行脚本

ansible oldboy -m shell -a "/server/scripts/yum.sh"

说明:shell模块相当于在本地主机上运行一个脚本

script --- 用于批量执行脚本模块

1)在管理主机上创建脚本

vim /server/scripts/yum.sh

#!/bin/bash

yum install -y keepalived

2) 利用脚本模块在远程主机上批量执行脚本

ansible oldboy -m script -a "/server/scripts/yum.sh"

说明:scripts模块相当于将本地脚本的信息,在每一个远程主机上进行执行

yum模块     批量安装软件模块

ansible oldboy -m yum -a "name=nmap state=installed"

service     批量管理主机服务状态

ansible oldboy -m service -a "name=crond state=stopped enabled=no"

cron        定时任务配置模块

*   *  *  *  *  job=/bin/sh /server/scripts/yum.sh &>/dev/null/

分 时 日 月 周  定时任务干的事

minute:                # Minute when the job should run ( 0-59, *, */2, etc )

hour:                  # Hour when the job should run ( 0-23, *, */2, etc )

day:                   # Day of the month the job should run ( 1-31, *, */2, etc )

month:                 # Month of the year the job should run ( 1-12, *, */2, etc )

weekday:               # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )

job:                   # The command to execute or, if env is set, the value of environment variable. The

command should not contain line breaks. Required

if state=present.

name:                  # Description of a crontab entry or, if env is set, the name of environment

variable. Required if state=absent. Note that if

name is not set and state=present, then a new

crontab entry will always be created, regardless

of existing ones.

disabled:              # If the job should be disabled (commented out) in the crontab. Only has effect if

state=present

eg01. 每天 0点,自动运行/server/scripts/yum.sh

ansible oldboy -m cron -a "minute=0 hour=0 day=* month=* weekday=* job='/bin/sh /server/scripts/yum.sh &>/dev/null/'"

ansible oldboy -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/yum.sh &>/dev/null/'"

创建定时任务:

ansible oldboy -m cron -a "name=cron01 minute=0 hour=0 job='/bin/sh /server/scripts/yum.sh &>/dev/null/'"

删除定时任务:

ansible oldboy -m cron -a "name=cron01 minute=0 hour=0 job='/bin/sh /server/scripts/yum.sh &>/dev/null/' state=absent"

ansible oldboy -m cron -a "name=cron02 state=absent"

注释定时任务:

ansible oldboy -m cron -a "name=cron03 minute=0 hour=0 job='/bin/sh /server/scripts/yum.sh &>/dev/null/' disabled=yes“

ansible oldboy -m cron -a "name=cron04  job='/bin/sh /server/scripts/yum.sh &>/dev/null/' disabled=yes"

取消注释信息:

ansible oldboy -m cron -a "name=cron03  job='/bin/sh /server/scripts/yum.sh &>/dev/null/' disabled=no"

ansible软件帮助信息查看方法

ansible-doc -l         --- 利用-l参数显示出ansible所有模块信息

ansible-doc -s cron    --- 利用-s参数指定查看某一个模块的详细说明

ansible输出信息颜色说明

深绿色:  执行正确结果信息,但不会对远程主机有任何修改

翔黄色:  执行正确结果信息,将会对远程主机数据进行修改

深粉色:  表示软件警告信息或者是建议信息

深红色:  表示软件命令执行错误(命令出错了,管理主机与被管理主机连接失效)

Ansible自动化运维工具的更多相关文章

  1. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  2. Ansible 自动化运维工具

    Ansible 自动化运维工具 Ansible是什么? Ansible是一个"配置管理工具"也是一个"自动化运维工具" Ansible 作用: Ansible是 ...

  3. Ansible自动化运维工具的使用

                                 Ansible自动化运维工具的使用       host lnventory 管理主机 ip  root账号密码 ssh端口 core mod ...

  4. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

  5. Ansible自动化运维工具使用

    概述本文描述自动化运维工具 Ansible 的安装及基础使用方法,包含: Centos 下的安装主机配置Ad-Hoc command(命令行执行)Playbook (任务剧本)Ansible 和 Sa ...

  6. ansible自动化运维工具使用详解

    一. ansible 简介 1. ansible ansible是新出现的 自动化 运维工具 , 基于Python研发 . 糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行 ...

  7. [Linux]Ansible自动化运维② - 工具与模块

    目录 一.Ansible的工具 1.1 Ansible的工作前提 1.2 Ansible的安装文件 1.3 Ansible的配置文件 1.4 Ansible的相关工具 1.4.1 [帮助工具]Ansi ...

  8. 三石之道之Ansible自动化运维工具部署

    centos6默认python版本为2.6 centos7默认python版本为2.7 ansible需要最低python2.7的支持 总结:centos6要部署ansible工具,需要先升级pyth ...

  9. ansible自动化运维工具的安装与使用

    运行环境 centOS6.6 ansible ansible的功能还是比较多的,博主只用它在集群上进行批量部署软件和维护的功能,其他不多做研究,有需要的话这篇文章会慢慢补充. ansible特点 轻量 ...

随机推荐

  1. 使用myeclipse开发Servlet

    1.在myeclipse中创建一个web工程 2.在src目录下建立一个包并建立一个Servlet(myeclipse会自把Servlet映射到web.xml文件中) 3.发布工程,实际上就是把web ...

  2. VS2013 ERROR SCRIPT5009: “WebForm_AutoFocus”未定义

    提示错误: <script type="text/javascript">//<![CDATA[WebForm_AutoFocus('txtcUserID');/ ...

  3. day17-jdbc 3.jdbc快速入门

    通过java程序操作数据库. 对数据库操作是对记录的操作.记录就是DML和DCL. 只要Java程序跟任何设备进行了连接,用完之后必须释放资源.最简单基础班讲I/O流,Java跟文件进行了连接,用完之 ...

  4. php apc 安装

    APC简介 APC(Alternative PHP Cache)是一个PHP缓存.它在内存中存储PHP页面并且减少了硬盘的I/O.这对于性能的提升十分明显.你甚至可以在CPU使用率下降50%的情况下提 ...

  5. 大话设计模式--Python

    作者:五岳 出处:http://www.cnblogs.com/wuyuegb2312 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一 ...

  6. Blender 工具使用—–准星

    Blender 工具使用-–准星 移动准星 直接按鼠标左键 将准星放置在坐标原点 快捷键Shift + C 将准星放置到指定位置 比如下面这个位置: 按Shift + S快捷键组合,弹出一个工具栏,选 ...

  7. PCL—点云分割(超体聚类) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5013968.html 1.超体聚类——一种来自图像的分割方法 超体(supervoxel)是一种集合,集合的元素是 ...

  8. 每日一Git计划启动

    效仿某大神,每日一Git,初次启动,维时30天 规范: 1. 不能提交纯属搞笑灌水的 2. 可以提交ACM题目代码 3. 想不到了..靠自觉的东西,对自己有提升的就做,没提升纯属刷数据的就不算吧.. ...

  9. UWP &WP8.1 依赖属性和用户控件 依赖属性简单使用 uwp添加UserControl

    上面说 附加属性.这章节说依赖属性. 所谓依赖属性.白话讲就是添加一个公开的属性. 同样,依赖属性的用法和附加属性的用法差不多. 依赖属性是具有一个get,set的属性,以及反调函数. 首先是声明依赖 ...

  10. Android emulator中C代码的调试——gdb/gdbservers时遇到的坑

    版权声明:本文为博主原创文章,未经博主允许不得转载. 先写个helloworld吧,在Android源码树中创建文件夹external/helloworld,加入文件: // helloworld.c ...