<span class="log-zd"><span class="log-close"><a title="隐藏目录"><i class="be be-cross"></i><strong>目录</strong></a></span></span>

第1章 ssh+key实现基于密钥连接(ansible使用前提)

说明:

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

   使用ansible需要首先实现ssh密钥连接

1.1 部署ssh key

1.1.1 第一个里程碑: 创建密钥对

创建密钥的过程

创建出来的文件:

1.1.2 第二个里程碑: 分发公钥文件

注意:密钥分发命令属于openssh-clients软件包

语法格式

[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 The authenticity of host 172.16.1.41 (172.16.1.41) cant be established. RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 172.16.1.41 (RSA) to the list of known hosts. root@172.16.1.41s password: Now try logging into the machine, with "ssh ‘[email protected]", and check in

.ssh/authorized_keys

to make sure we havent added extra keys that you werent expecting. 

1.1.3 第三个里程碑: 基于密钥登陆测试

   基于密钥登陆方式成功↑

不用的登陆到远程主机直接执行命令,返回输出结果↑

说明:

1.1.4 ssh服务分发公钥实质执行过程

1.2 默认端口号不是22,如何分发公钥

1.2.1 查询ssh-copy-id命令可以得知这是个脚本文件

看看脚本内容发现传输方式

说明:

   1、切换用户到家目录下,临时设置umask值

   2、判断客户端相应用户中有没有.ssh目录,如果没有.ssh 目录就进行创建

3、将管理端公钥文件内容添加到客户端~./ssh/authorized_keys, 默认authorized_keys文件不存在,需要创建,文件权限600

1.2.2 实现非22端口的分发

方法一: 修改脚本内容

说明:根据命令脚本,修改$1传参信息,从而实现根据ssh不同端口传送公钥文件

方法二:将传入的参数上添加上端口信息**(**推荐)

.ssh/authorized_keys

to make sure we havent added extra keys that you werent expecting.

1.2.3 关于 /usr/bin/ssh-copy-id 脚本中 $1的说明

1.2.3.1  编写脚本shift

until [ $# -eq ] do echo $* shift done

说明:

由于/usr/bin/ssh-copy-id 脚本中前面使用了两个shift 所有原本该为$3的参数变为了$1.

1.3 实现自动分发公钥,远程管理多台主机

1.3.1 【预备知识】shell中三种循环

for n in (1..100) do xxx done

#while循环:循环条件为真时,一直循环;为假时,停止循环

while [ture] do xxx done

#until 循环: 循环条件为假时,一直循环;为真时,停止循环

until [ture] do xxx done

1.3.2 实现自动分发公钥,远程管理多台主机的阻碍因素?

1.3.3 解决阻碍因素

1.自动保存路径,并且不密码

参数说明:

-P passphrase Provides the (old) passphrase. 提供一个密码信息

-N new_passphrase Provides the new passphrase. -P -N 都是免交互方式指定密码信息

-q 安静的 不输出信息,减少信息输出

2.解决分发公钥时需要进行的交互

参数说明:

要实现免密码,需要一款软件 sshpass  该软件就是为ssh提供密码使用的

注意:密码与 -p****之间不能有空格

1.3.4 最终批量分发脚本内容

创建密钥

</span>rm ~/.ssh/id_rsa* -f ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q

分发公钥

for ip in 31 41 8 do sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub " [email protected].$ip -o StrictHostKeyChecking=no " &>/dev/null if [ $? -eq ];then action "fenfa 172.16.1.$ip" /bin/true else action "fenfa 172.16.1.$ip" /bin/false fi echo "" done

脚本执行效果:

说明:

   脚本中引用 . /etc/rc.d/init.d/functions 函数,可以显示执行结果的判断。

   使用if语句进行判断,action 执行相应的动作。true/false

1.3.5 实现基于密钥的批量管理脚本

for ip in 8 31 41 do echo ========host 172.16.1.$ip======= ssh root@172.16.1.$ip "$CMD" echo ============END=============== echo "" done

脚本执行效果:

======172.16.1.31====== Thu Oct 19 16:25:08 CST 2017 =========END=============

======172.16.1.41====== Thu Oct 19 16:25:08 CST 2017 =========END=============

基于密钥登陆方式,分发的公钥文件会识别用户信息,所以能够实现免密码批量管理。

第2章 ansible软件介绍

  • python 语言是运维人员必须会的语言
  • ansible 是一个基于python 开发的自动化运维工具
  • 其功能实现基于ssh远程连接服务
  • ansible 可以实现批量系统配置,批量软件部署,批量文件拷贝,批量运行命令等功能

2.1 自动化批量管理方式说明

2.1.1 ssh+key方式的说明

    免密码登录验证是单向的,方向从私钥(钥匙) >==> 公钥(锁)

    SSH免密码登录基于用户的,最好不要跨不同的用户

    SSH连接慢解决;即修改sshd_config配罝文件参数信息

    批量分发1000台初始都需要输入一次密码,并且第一次连接要确认(expect/sshpass)

2.1.2 企业级生产场景批量管理-自动化管理方案

①.最简单/最常用/最强大的选择是ssh key+shell/pssh方案,一般中小型企业会用(50-100台以下规模企业)

     a.利用ssh key执行命令,并将命令放在脚本里面

     b.利用ssh key执行命令,将命令放在脚本里面,并加上相应循环语句或判断语句

②.sina cfengine/puppet较早的批量管理工具;现在基本上没有企业用

③.门户级别比较流行的,puppet批量管理工具(复杂/笨重)

④.saltstack批量管理工具;特点:简单,功能强大(配罝复杂>-–赶集网/小米/一些CDN公司 批量管理路线:ssh key–>cfengine–>puppet–>saltstack/ansible

  PS:使用ansible软件的前提是ssh key公钥分发充成

2.1.3 如何完成成集群规模架构一键自动化实现(步骤说明)

①.1台服务器先配置好(kickstart,cobbler无人值守安装)。高级实现云计算(按需分配,动态调整)(openstack,kvm)

②.linux基本优化,包括ssh服务(可以自动化实现)。

  创建密钥信息(自动化免交互创建)

  进行批量分发密钥(sshpass,expect自动化实现)

⑤.ansible软件安装(可以自动化实现)

⑥.网络服务自动化安装(ansible实现)

(搭建yum仓库,定制rpm包)

2.2 ansible软件特点概述

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

l 不需要服务端(no sever)

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

l 配置文件 /etc/ansible/ansible.cfg (前期不用配置)

2.2.1 ansible软件中查看模块相关信息方法

[root@m01 ~]# ansible-doc -s cron 参看指定模块的帮助

2.3 部署ansible软件

2.3.1 第一个里里程碑:部署ssh+key免密码登录方式

参见第一章内容

2.3.2 第二个里程碑:被管理端安装ansible相关管理软件

   该软件是用来对selinux进行设置的,确保即使服务器selinux服务开启,依旧能够通过ansible 软件管理。

2.3.3 第三个里程碑:管理端安装ansible软件,配置hosts文件

软件安装完成,进行修改ansible下的hosts文件,注意文件的路径

文件信息说明:

1.中括号中的名字代表组名

2.主机(hosts)部分可以使用域名、主机名、IP地址表示;一般此类配置中多使用IP地址;

3.组名下的主机地址就是ansible可以管理的地址

至此ansible 服务就部署完成

2.4 查看ansible软件相关信息

2.4.1 ansible实践部署地址规划

<td valign="top" width="174">
  <p align="center">
    <span style="font-size: 14px; color: #000000; background-color: #00ccff;"><strong>网卡eth0</strong></span>
  </p>
</td>

<td valign="top" width="174">
  <p align="center">
    <span style="font-size: 14px; color: #000000; background-color: #00ccff;"><strong>网卡eth1</strong></span>
  </p>
</td>

<td valign="top" width="174">
  <p align="center">
    <span style="font-size: 14px; color: #000000; background-color: #00ccff;"><strong>用途说明</strong></span>
  </p>
</td>
<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">10.0.0.61</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">172.16.1.61</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">批量管理服务器</span>
  </p>
</td>
<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">10.0.0.31</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">172.16.1.31</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">nfs共享储存服务器</span>
  </p>
</td>
<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">10.0.0.41</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">172.16.1.41</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">rsync备份服务器</span>
  </p>
</td>
<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">10.0.0.8</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">172.16.1.8</span>
  </p>
</td>

<td valign="top" width="174">
  <p>
    <span style="font-size: 13px;">web服务器</span>
  </p>
</td>

2.4.2 ansible软件的版本信息

2.4.3 软件目前主要会用到的文件

2.4.4 /etc/ansible下的文件

2.5 ansible软件的使用/参数

2.5.1 ansible远程批量执行命令

语法:

ansible clsn -m command -a “uptime”

ansible 定义的组/单个ip/域名/all -m command -a “uptime”

2.5.2 未分发公钥如何实现远程管理主机及指定ansible端口信息

配置hosts文件时配置上密码

[clsn] 172.16.1.31:52113 ansible_ssh_user=root ansible_ssh_pass=123456 172.16.1.41 172.16.1.8

   测试修改端口后的结果 使用ping 模块

2.6 ansible软件常用参数表

<td valign="top" width="527">
  <p align="center">
    <span style="font-size: 15px;"><strong>参数说明</strong></span>
  </p>
</td>
<td width="527">
  <p>
    <span style="font-size: 13px;">-module-name=MODULE_NAME</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">module name to execute (default=command)</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">相应名称的模块被执行(默认模块为command ); </span>
  </p>
  
  <p>
    <span style="font-size: 13px;">-m后边是模块的名宇</span>
  </p>
</td>
<td width="527">
  <p>
    <span style="font-size: 13px;">-args=MODULE_ARGS</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">module arguments</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">模块参数信息</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">-a后面是要执行的命令;也可以写个ip ,针对台机器来执行命令</span>
  </p>
</td>
<td width="527">
  <p>
    <span style="font-size: 13px;">don't make any changes, instead, try to predict some of the changes that may</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">occurs</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">不做任何改变;反而,只是尝试预言些可能出现的改变</span>
  </p>
</td>
<td width="527">
  <p>
    <span style="font-size: 13px;">perform a syntax check on the playbook, but do not execute ii*></span>
  </p>
  
  <p>
    <span style="font-size: 13px;">执行语法检查在剧本上,但是并不执行剧本</span>
  </p>
</td>

2.6.1 ansible命令执行结果色彩说明:

第3章 ansible中的模块说明

3.1 ping 模块:测试连通性

   连接正常返回 pong 通过帮助信息可以获得 ↓

A trivial test module, this module always returns pong</span><span style="color: #800000;">'</span><span style="color: #800000;"> on successful contact. It does not make sense in playbooks, but it is useful from /usr/bin/ansible to verify the ability to login and that a usable python is configured. This is NOT ICMP ping, this is just a trivial test module.

3.2 command 模块 默认模块

3.2.1 command命令常用参数说明

<td valign="top" width="537">
  <p align="center">
    <span style="font-size: 15px; font-family: 'Microsoft YaHei';"><strong>参数说明</strong></span>
  </p>
</td>
<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">在执行命令之前,通过cd命令进入到指定目录中</span>
  </p>
  
  <p>
    <span style="font-size: 13px;"># ansible clsn -m command -a "chdir=/tmp ls"</span>
  </p>
</td>
<td valign="top" width="537">
  <p align="center">
    <span style="font-size: 13px;">定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤</span>
  </p>
</td>
<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">改变shell使用command进行执行,并且执行时要使用绝对路径</span>
  </p>
</td>
<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">命令模块采用自由形式命令运行;即可以输入任意linux命令</span>
  </p>
</td>
<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤</span>
  </p>
</td>
  <p>
    <span style="font-size: 13px;">(added in 1.8)</span>
  </p>
</td>

<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令</span>
  </p>
</td>

不指定模块的时候默认使用的模块就是command  ↓

172.16.1.31 | SUCCESS | rc= » Thu Oct 19 17:12:15 CST 2017

172.16.1.8 | SUCCESS | rc= » Thu Oct 19 17:12:15 CST 2017

使用ansible自带模块执行命令 如果要用 > < | & ’ ’ 使用shell模块

172.16.1.31 | SUCCESS | rc= » Thu Oct 19 17:12:28 CST 2017

172.16.1.41 | SUCCESS | rc= » Thu Oct 19 17:12:27 CST 2017

chdir参数的使用:

172.16.1.8 | SUCCESS | rc= » /tmp

172.16.1.41 | SUCCESS | rc= » /tmp

creates 文件是否存在,不存在就执行命令

removes 文件是否存在,不存在就不执行命令,

3.3 shell模块 万能模块

执行linux命令时可以用

远程节点执行命令

   说明: shell 模块在远程执行脚本时,远程主机上一定要有相应的脚本

fenfa 172.16.1.41 [ OK ]

fenfa 172.16.1.8 [ OK ]

3.4 script 模块 执行脚本模块

在本地执行脚本时,将脚本中的内容传输到远程节点上运行

说明:

3.5 copy模块 把本地文件发送到远端

3.5.1 copy模块常用参数

<td width="537">
  <p align="center">
    <span style="font-size: 15px;"><strong>选项说明</strong></span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">在覆盖远端服务器文件之前,将远端服务器源文件备份,备份文件包含时间信息。有两个选项:yes|no</span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">用于替代"src&rdquo;,可以直接设定指定文件的值</span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录</span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">递归设定目录的权限,默认为系统默认权限</span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖。</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes。<strong>别名:</strong><strong>thirsty</strong></span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">所有的file模块里的选项都可以在这里使用</span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。</span>
  </p>
</td>
<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">定义文件或目录的权限;注意:是4位</span>
  </p>
</td>
<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">修改属主</span>
  </p>
</td>
<td valign="top" width="537">
  <p>
    <span style="font-size: 13px;">修改属组</span>
  </p>
</td>

说明: src和content不能同时使用

3.5.2 copy常用命令参数测试

使用copy 模块,将/etc/hosts 文件 传输到各个服务器送,权限修改为0600 属主属组为clsn

检查结果

172.16.1.41 | SUCCESS | rc= » -rw——- 1 clsn clsn 357 Oct 11 15:12 /tmp/hosts

172.16.1.8 | SUCCESS | rc= » -rw——- 1 clsn clsn 357 Oct 19 19:00 /tmp/hosts

移动远程主机上的文件 remote_src=true 参数

定义文件中的内容 content=clsnedu.com 默认没有换行

3.6 file模块 设置文件属性

3.6.1 file模块常用参数

<td colspan="2" width="527">
  <p align="center">
    <span style="font-size: 15px;"><strong>参数说明</strong></span>
  </p>
</td>
<td colspan="2" width="527">
  <p>
    <span style="font-size: 13px;">设置复制传输后的数据属主信息</span>
  </p>
</td>
<td colspan="2" width="527">
  <p>
    <span style="font-size: 13px;">设置复制传输后的数据属组信息</span>
  </p>
</td>
<td colspan="2" width="527">
  <p>
    <span style="font-size: 13px;">设置文件数据权限信息</span>
  </p>
</td>
<td colspan="2" width="527">
  <p>
    <span style="font-size: 13px;">要创建的文件或目录命令,以及路径信息</span>
  </p>
</td>
<td colspan="2" width="527">
  <p>
    <span style="font-size: 13px;">指定要创建软链接的文件信息</span>
  </p>
</td>
<td colspan="2" width="527">
  <p>
    <span style="font-size: 13px;"><strong>state</strong><strong>参数信息</strong></span>
  </p>
</td>
<td width="367">
  <p>
    <span style="font-size: 13px;">创建目录</span>
  </p>
</td>
<td width="367">
  <p>
    <span style="font-size: 13px;">创建文件</span>
  </p>
</td>
<td width="367">
  <p>
    <span style="font-size: 13px;">创建软链接</span>
  </p>
</td>
<td width="367">
  <p>
    <span style="font-size: 13px;">创建出硬链接</span>
  </p>
</td>
<td width="367">
  <p>
    <span style="font-size: 13px;">目录将被递归删除以及文件,而链接将被取消链接</span>
  </p>
</td>
<td width="367">
  <p>
    <span style="font-size: 13px;">创建文件;如果路径不存在将创建一个空文件</span>
  </p>
</td>

注意:重命名和创建多级目录不能同时实现

3.6.2 常用参数测试

创建目录

创建文件

创建软连接

删除目录文件信息

[root@m01 ~]# ansible clsn -m file -a "dest=/tmp/clsn_file state=absent" 172.16.1.31 | SUCCESS => { "changed": true, "path": "/tmp/clsn_file", "state": "absent"

创建多级目录

注意:重命名和创建多级目录不能同时实现

3.7 fetch 模块  拉取文件

3.7.1 fetch常用参数说明

<td width="537">
  <p align="center">
    <span style="font-size: 15px;"><strong>参数说明</strong></span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">将远程主机拉取过来的文件保存在本地的路径信息</span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">指定从远程主机要拉取的文件信息,只能拉取文件</span>
  </p>
</td>
<td width="537">
  <p>
    <span style="font-size: 13px;">默认设置为no,如果设置为yes,将不显示172.16.1.8/etc/信息</span>
  </p>
</td>

3.7.2 常用参数实例

从远程拉取出来文件

[root@m01 cp]# tree /tmp/backup/ /tmp/backup/ ├── 172.16.1.31 │ └── etc │ └── hosts ├── 172.16.1.41 │ └── etc │ └── hosts └── 172.16.1.8 └── etc └── hosts

   flat 参数,拉去的时候不创建目录**(同名文件会覆盖)**

3.8 mount模块 配置挂载点模块

3.8.1 mount模块常用参数

<td colspan="2" width="461">
  <p align="center">
    <span style="font-size: 15px;"><strong>参数说明</strong></span>
  </p>
</td>
<td colspan="2" width="461">
  <p>
    <span style="font-size: 13px;">指定挂载文件类型 -t nfs == fstype=nfs</span>
  </p>
</td>
<td colspan="2" width="461">
  <p>
    <span style="font-size: 13px;">设定挂载的参数选项信息 -o ro&nbsp; == opts=ro</span>
  </p>
</td>
<td colspan="2" width="461">
  <p>
    <span style="font-size: 13px;">挂载点路径&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path=/mnt</span>
  </p>
</td>
<td colspan="2" width="461">
  <p>
    <span style="font-size: 13px;">要被挂载的目录信息&nbsp; src=172.16.1.31:/data</span>
  </p>
</td>
<td colspan="2" width="461">
  <p align="center">
    <span style="font-size: 13px;"><strong>state</strong><strong>状态参数</strong></span>
  </p>
</td>
<td valign="top" width="319">
  <p>
    <span style="font-size: 13px;">加载/etc/fstab文件 实现卸载</span>
  </p>
</td>
<td valign="top" width="319">
  <p>
    <span style="font-size: 13px;">在fstab文件中删除挂载配置</span>
  </p>
</td>
<td valign="top" width="319">
  <p>
    <span style="font-size: 13px;">在fstab文件中添加挂载配置</span>
  </p>
</td>
<td valign="top" width="319">
  <p>
    <span style="font-size: 13px;">1.将挂载信息添加到/etc/fstab文件中</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">2.加载配置文件挂载</span>
  </p>
</td>

3.8.2 mount参数实例

挂载

卸载

3.9 cron模块 定时任务

3.9.1 cron模块常用参数

<td colspan="2" width="556">
  <p align="center">
    <span style="font-size: 15px;"><strong>参数说明</strong></span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">Minute when the job should run ( 0-59, *, */2, etc )</span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">Hour when the job should run ( 0-23, *, */2, etc )</span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">Day of the month the job should run ( 1-31, *, */2, etc )</span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">Month of the year the job should run ( 1-12, *, */2, etc )</span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )</span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">工作 ;要做的事情</span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">定义定时任务的描述信息</span>
  </p>
</td>
<td colspan="2" width="556">
  <p>
    <span style="font-size: 13px;">注释定时任务</span>
  </p>
</td>
<td colspan="2" width="556">
  <p align="center">
    <span style="font-size: 13px;"><strong>state </strong><strong>状态参数</strong></span>
  </p>
</td>
<td valign="top" width="357">
  <p>
    <span style="font-size: 13px;">删除定时任务</span>
  </p>
</td>
<td valign="top" width="357">
  <p>
    <span style="font-size: 13px;">创建定时任务</span>
  </p>
</td>

3.9.2 cron模块参数实践

添加定时任务

删除定时任务

只用名字就可以删除

注释定时任务

   注意: 注释定时任务的时候必须有job的参数

取消注释

3.10.1 yum 模块常用参数

<td valign="top" width="349">
  <p align="center">
    <span style="font-size: 15px;"><strong>参数说明</strong></span>
  </p>
</td>
<td valign="top" width="349">
  <p>
    <span style="font-size: 13px;">指定安装的软件</span>
  </p>
</td>
<td valign="top" width="349">
  <p>
    <span style="font-size: 13px;">安装</span>
  </p>
</td>

3.10.2 yum模块参数实践

3.11 service模块 服务管理

3.11.1 service模块常用参数说明

<td valign="top" width="461">
  <p align="center">
    <span style="font-size: 15px;"><strong>参数说明</strong></span>
  </p>
</td>
<td valign="top" width="461">
  <p>
    <span style="font-size: 13px;">服务的名称</span>
  </p>
</td>
<td valign="top" width="461">
  <p>
    <span style="font-size: 13px;">停止服务 服务状态信息为过去时</span>
  </p>
  
  <p>
    <span style="font-size: 13px;">stared/stoped/restarted/reloaded</span>
  </p>
</td>
<td valign="top" width="461">
  <p>
    <span style="font-size: 13px;">设置开机自启动</span>
  </p>
</td>

说明 :service 管理的服务必须存在在/etc/init.d/下有的服务脚本

3.11.2 service 模块参数实践

重启定时任务

3.12 ansible中的常用模块

<td width="508">
  <p align="center">
    <span style="font-size: 15px;"><strong>模块说明</strong></span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">执行命令模块,ansible命令执行默认模块</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">行shell脚本模块</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">把脚本发到客户端,然后执行;执行脚本命令在远端服务器上</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">把本地文件发送到远端</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">设定文件属性模块</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">系统服务管理模块</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">计划任务管理模块</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">yum软件包安装管理模块</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">使用rsync同步文件模块</span>
  </p>
</td>
<td width="508">
  <p>
    <span style="font-size: 13px;">挂载模块</span>
  </p>
</td>

3.13 其他模块补充

3.13.1 hostname 修改主机名模块

3.13.2 selinux 管理模块

3.13.3 get_url 模块 == 【wget】

   url= 下载文件的地址 dest 下载到哪里

   timeout 超时时间

   url_password   密码

   url_username  用户名

第4章 ansible-playbook 剧本

4.1 ansible基础知识部分补充

4.1.1 ansible软件特点:

· 可以实现批量管理

· 可以实现批量部署

· ad-hoc(批量执行命令)-–针对临时性的操作

· 编写剧本-脚本(playbook)-–针对重复性的操作

4.1.2 ansible核心功能:

pyYAML-—-用于ansible编写剧本所使用的语言格式(saltstack-–python) 

paramiko-–远程连接与数据传输  

Jinja2-—-用于编写ansible的模板信息 

        

4.2 ansible剧本编写规则说明

4.2.1 pyYAML语法规则:

   规则一:缩进

       

    规则二:冒号

   

    规则三:短横线

    核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab

4.3 剧本书写格式

4.3.1 剧本格式示例

4.4 剧本编写后检查方法

        -– 进行剧本配置信息语法检查

           -– 模拟剧本执行(彩排)

4.4.1 语法检查

4.4.2 模拟剧本执行

TASK [Gathering Facts] **************************************************** ok: [172.16.1.41] ok: [172.16.1.8] ok: [172.16.1.31]

TASK [cron] *************************************************************** ok: [172.16.1.8] ok: [172.16.1.41] ok: [172.16.1.31]

PLAY RECAP **************************************************************** 172.16.1.31 : ok=2 changed= unreachable= failed= 172.16.1.41 : ok=2 changed= unreachable= failed= 172.16.1.8 : ok=2 changed= unreachable= failed=

4.5 剧本示例

4.5.1 剧本编写内容扩展:剧本任务编写多个任务

4.5.2 剧本编写内容扩展:剧本任务编写多个主机

4.6 剧本编写方式

01 多主机单任务编写方式

02 多主机多任务编写方式

03 不同主机多任务编写方式

第5章 常见错误

5.1 ansible编写剧本排错思路

  1. ansible-playbook编写完,检査语法和模拟测试运行

  2. 打开剧本,定位异常问題原因,将剧本中的内容转换命令执行一次

  1. 将参数中的脚本文件推送到远程屎务器,在远程服务器本地执行脚本 sh -x test.sh

说明:ansible执行时,加1上-vvvv显示ansible详细执行过程,也可以定位异常原因!

5.1.1 排错逻辑

  1. 剧本执行中的错误

  2. 把剧本中的内容转换为ansible命令执行

  1. 把ansible服务器上执行的命令放在被管理主机上执行

5.2 ansible 无法正常使用

5.2.1 在被控端上 root@notty 进程一直存在

5.2.2 解决办法

首先,将该进程干掉

5.2.3 然后使用ansible的 -vvvv 参数查看执行的错误信息

找到在哪里出错。

5.2.4 可能的错误

在 /etc/ssh/sshd_config 文件中的第132行为空,导致sftp 无法连接,出错~

5.3 常见问题二:  

原因分析:

在ansible的hosts文件中,没有配置相应主机地址信息

5.3.1 常见问题三:       

原因分析:

因为没有受控端的指纹信息,在known_hosts文件中

 

    <li>
      <a href="#12_22">1.2 默认端口号不是22,如何分发公钥</a><ul>
        <li>
          <a href="#121_ssh-copy-id">1.2.1 查询ssh-copy-id命令可以得知这是个脚本文件</a>
        </li>
        <li>
          <a href="#122_22">1.2.2 实现非22端口的分发</a>
        </li>
        <li>
          <a href="#123_usrbinssh-copy-id_1">1.2.3 关于 /usr/bin/ssh-copy-id 脚本中 $1的说明</a><ul>
            <li>
              <a href="#1231nbsp_shift">1.2.3.1&nbsp; 编写脚本shift</a>
            </li>
          </ul>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#13">1.3 实现自动分发公钥,远程管理多台主机</a><ul>
        <li>
          <a href="#131_shell">1.3.1 【预备知识】shell中三种循环</a>
        </li>
        <li>
          <a href="#132">1.3.2 实现自动分发公钥,远程管理多台主机的阻碍因素?</a>
        </li>
        <li>
          <a href="#133">1.3.3 解决阻碍因素</a>
        </li>
        <li>
          <a href="#134">1.3.4 最终批量分发脚本内容</a>
        </li>
        <li>
          <a href="#135">1.3.5 实现基于密钥的批量管理脚本</a>
        </li>
      </ul>
    </li>
  </ul>
</li>

<li>
  <a href="#2_ansible">第2章 ansible软件介绍</a><ul>
    <li>
      <a href="#21">2.1 自动化批量管理方式说明</a><ul>
        <li>
          <a href="#211_sshkey">2.1.1 ssh+key方式的说明</a>
        </li>
        <li>
          <a href="#212">2.1.2 企业级生产场景批量管理-自动化管理方案</a>
        </li>
        <li>
          <a href="#213">2.1.3 如何完成成集群规模架构一键自动化实现(步骤说明)</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#22_ansible">2.2 ansible软件特点概述</a><ul>
        <li>
          <a href="#221_ansible">2.2.1 ansible软件中查看模块相关信息方法</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#23_ansible">2.3 部署ansible软件</a><ul>
        <li>
          <a href="#231_sshkey">2.3.1 第一个里里程碑:部署ssh+key免密码登录方式</a>
        </li>
        <li>
          <a href="#232_ansible">2.3.2 第二个里程碑:被管理端安装ansible相关管理软件</a>
        </li>
        <li>
          <a href="#233_ansiblehosts">2.3.3 第三个里程碑:管理端安装ansible软件,配置hosts文件</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#24_ansible">2.4 查看ansible软件相关信息</a><ul>
        <li>
          <a href="#241_ansible">2.4.1 ansible实践部署地址规划</a>
        </li>
        <li>
          <a href="#242_ansible">2.4.2 ansible软件的版本信息</a>
        </li>
        <li>
          <a href="#243">2.4.3 软件目前主要会用到的文件</a>
        </li>
        <li>
          <a href="#244_etcansible">2.4.4 /etc/ansible下的文件</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#25_ansible">2.5 ansible软件的使用/参数</a><ul>
        <li>
          <a href="#251_ansible">2.5.1 ansible远程批量执行命令</a>
        </li>
        <li>
          <a href="#252_ansible">2.5.2 未分发公钥如何实现远程管理主机及指定ansible端口信息</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#26_ansible">2.6 ansible软件常用参数表</a><ul>
        <li>
          <a href="#261_ansible">2.6.1 ansible命令执行结果色彩说明:</a>
        </li>
      </ul>
    </li>
  </ul>
</li>

<li>
  <a href="#3_ansible">第3章 ansible中的模块说明</a><ul>
    <li>
      <a href="#31_ping">3.1 ping 模块:测试连通性</a>
    </li>
    <li>
      <a href="#32_command">3.2 command 模块 默认模块</a><ul>
        <li>
          <a href="#321_command">3.2.1 command命令常用参数说明</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#33_shell">3.3 shell模块 万能模块</a>
    </li>
    <li>
      <a href="#34_script">3.4 script 模块 执行脚本模块</a>
    </li>
    <li>
      <a href="#35_copy">3.5 copy模块 把本地文件发送到远端</a><ul>
        <li>
          <a href="#351_copy">3.5.1 copy模块常用参数</a>
        </li>
        <li>
          <a href="#352_copy">3.5.2 copy常用命令参数测试</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#36_file">3.6 file模块 设置文件属性</a><ul>
        <li>
          <a href="#361_file">3.6.1 file模块常用参数</a>
        </li>
        <li>
          <a href="#362">3.6.2 常用参数测试</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#37_fetch_nbsp">3.7 fetch 模块&nbsp; 拉取文件</a><ul>
        <li>
          <a href="#371_fetch">3.7.1 fetch常用参数说明</a>
        </li>
        <li>
          <a href="#372">3.7.2 常用参数实例</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#38_mount">3.8 mount模块 配置挂载点模块</a><ul>
        <li>
          <a href="#381_mount">3.8.1 mount模块常用参数</a>
        </li>
        <li>
          <a href="#382_mount">3.8.2 mount参数实例</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#39_cron">3.9 cron模块 定时任务</a><ul>
        <li>
          <a href="#391_cron">3.9.1 cron模块常用参数</a>
        </li>
        <li>
          <a href="#392_cron">3.9.2 cron模块参数实践</a>
        </li>
        <li>
          <a href="#3101_yum">3.10.1 yum 模块常用参数</a>
        </li>
        <li>
          <a href="#3102_yum">3.10.2 yum模块参数实践</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#311_service">3.11 service模块 服务管理</a><ul>
        <li>
          <a href="#3111_service">3.11.1 service模块常用参数说明</a>
        </li>
        <li>
          <a href="#3112_service">3.11.2 service 模块参数实践</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#312_ansible">3.12 ansible中的常用模块</a>
    </li>
    <li>
      <a href="#313">3.13 其他模块补充</a><ul>
        <li>
          <a href="#3131_hostname">3.13.1 hostname 修改主机名模块</a>
        </li>
        <li>
          <a href="#3132_selinux">3.13.2 selinux 管理模块</a>
        </li>
        <li>
          <a href="#3133_get_url__wget">3.13.3 get_url 模块 == 【wget】</a>
        </li>
      </ul>
    </li>
  </ul>
</li>

<li>
  <a href="#4_ansible-playbook">第4章 ansible-playbook 剧本</a><ul>
    <li>
      <a href="#41_ansible">4.1 ansible基础知识部分补充</a><ul>
        <li>
          <a href="#411_ansible">4.1.1 ansible软件特点:</a>
        </li>
        <li>
          <a href="#412_ansible">4.1.2 ansible核心功能:</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#42_ansible">4.2 ansible剧本编写规则说明</a><ul>
        <li>
          <a href="#421_pyYAML">4.2.1 pyYAML语法规则:</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#43">4.3 剧本书写格式</a><ul>
        <li>
          <a href="#431">4.3.1 剧本格式示例</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#44">4.4 剧本编写后检查方法</a><ul>
        <li>
          <a href="#441">4.4.1 语法检查</a>
        </li>
        <li>
          <a href="#442">4.4.2 模拟剧本执行</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#45">4.5 剧本示例</a><ul>
        <li>
          <a href="#451">4.5.1 剧本编写内容扩展:剧本任务编写多个任务</a>
        </li>
        <li>
          <a href="#452">4.5.2 剧本编写内容扩展:剧本任务编写多个主机</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#46">4.6 剧本编写方式</a>
    </li>
  </ul>
</li>

<li>
  <a href="#5">第5章 常见错误</a><ul>
    <li>
      <a href="#51_ansible">5.1 ansible编写剧本排错思路</a><ul>
        <li>
          <a href="#511">5.1.1 排错逻辑</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#52_ansible">5.2 ansible 无法正常使用</a><ul>
        <li>
          <a href="#521_rootnotty">5.2.1 在被控端上 root@notty 进程一直存在</a>
        </li>
        <li>
          <a href="#522">5.2.2 解决办法</a>
        </li>
        <li>
          <a href="#523_ansible_-vvvv">5.2.3 然后使用ansible的 -vvvv 参数查看执行的错误信息</a>
        </li>
        <li>
          <a href="#524">5.2.4 可能的错误</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#53_nbspnbsp">5.3 常见问题二:&nbsp;&nbsp;</a><ul>
        <li>
          <a href="#531_nbspnbspnbspnbspnbspnbspnbsp">5.3.1 常见问题三:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
        </li>
      </ul>
    </li>
  </ul>
</li>