澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

Plateform使用ansible创建新实例,运维工具

2019-06-29 作者:澳门新萄京官方网站   |   浏览(196)

谷歌(Google)大法好,退aws保平安

一、初识Ansible 

图片 1

ansible服务配置与行使,ansible服务配置

在运营中常见自动化操作

---假若自个儿今后有叁个计算机(本机),先用Google云创三个服务器(主机) ,再通过ansible在谷歌(Google)云上成立三个服务器(节点)并拓展支配

介绍:

Ansible 简介

Ansible 是新出现的自动化运行工具,基于 Python 开垦,集结了过多运营工具(puppet、cfengine、chef、func、fabric)的帮助和益处,完成了批量系统布署、批量主次安插、批量周转命令等作用。

Ansible 是依据模块事业的,自壬戌有批量配备的力量。真正具有批量安插的是 Ansible 所运转的模块,Ansible 只是提供一种框架。主要回顾:

  • (1)连接插件 connection plugins:肩负和被监察和控制端完毕通讯;
  • (2)host inventory:钦赐操作的主机,是八个布署文件之中定义监控的主机;
  • (3)各类模块大旨模块、command 模块、自定义模块;
  • (4)借助于插件实现记录日志邮件等职能;
  • (5)playbook:剧本施行多少个职分时,非必需能够让节点三回性运营八个职责。

第1章 ssh key完成基于密钥连接(ansible使用前提)

说明:

   ansible其功用达成基于SSH远程连接服务

   运用ansible必要首先落实ssh密钥连接

1、怎么着大面积安装操作系统:

 

  Ansible 使用 模块(Modules)来定义配置职务。模块能够用职业脚本语言(Python,Bash,Ruby,等等)编写,那是二个很好的做法,使各类模块幂等。Ansible剧本(YAML语言编写)剧中人物映射到 节点/虚构机上,以对那一个节点/设想机 实行编制有序的试行。Ansible扶助ad-hoc职责:管理任务(不必幂等)以在多少个节点/设想机上实施。Ansible具备无代理框架结构:你无需在安排的节点/虚构机上安装Ansible(不过,那个节点必须设置python情状),Ansible 通过SSH或许通过PowerShell(Windows机器)从单个调整机械上布置管理节点/设想机,并且能够协助互相配置几个节点。Ansible 能够用来布置 类unix系统或 Windows节点/设想机。

施行意况

设想机 x2,操作系统:TinyCoreLinux,由 docker-machine 成立。

1.1 部署ssh key

在bare metal(裸机)上设置操作系统等,能够行使如下技术:pxe、cobbler

先把温馨的公钥加到元数据里面,在google cloud plateform创造叁个新实例

大旨特色:

安装 Ansible

Tinycorelinux 镜像使用辅助 - 加快软件设置

1、安装 python 、python-setuptools

tce-load -wi python python-setuptools

2、安装 pip

sudo easy_install -i http://mirrors.aliyun.com/pypi/simple/ pip

3、安装 ansible

sudo pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com ansible

4、验证 ansible

ansible --version

1.1.1 第贰个里程碑: 创造密钥对

ssh-keygen
-t 指定密钥类型  rsa1 dsa(常用) ecdsa
语法:
SYNOPSIS
     ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment]
                [-f output_keyfile]
     ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
     ssh-keygen -i [-f input_keyfile]
     ssh-keygen -e [-f input_keyfile]
     ssh-keygen -y [-f input_keyfile]
     ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
     ssh-keygen -l [-f input_keyfile]
     ssh-keygen -B [-f input_keyfile]
     ssh-keygen -D pkcs11
     ssh-keygen -F hostname [-f known_hosts_file] [-l]
     ssh-keygen -H [-f known_hosts_file]
     ssh-keygen -R hostname [-f known_hosts_file]
     ssh-keygen -r hostname [-f input_keyfile] [-g]
     ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
     ssh-keygen -T output_file -f input_file [-v] [-a num_trials]
                [-W generator]
     ssh-keygen [-n] [-D smartcard]
     ssh-keygen -s ca_key -I certificate_identity [-h] [-Z principals]
                [-O option] [-V validity_interval] [-z serial_number] file ...
     ssh-keygen -L [-f input_keyfile]

始建密钥的历程

[[email protected] ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):  #私钥创建后保存的路径
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):             #私钥需不需进行加密,设置密码
Enter same passphrase again:   #私钥需不需进行加密,再次输入密码确认
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
31:4a:4f:9f:97:b0:b6:ca:4c:53:78:70:89:83:5f:16 [email protected]
The key's randomart image is:
 --[ DSA 1024]---- 
|          E      |
|       . . o     |
|      o B *      |
|     . = @   .   |
|      . S B o    |
|           o     |
|        o .      |
|         o       |
|                 |
 ----------------- 

开创下来的公文:

[[email protected] ~]# ll /root/.ssh/
total 8
-rw------- 1 root root 668 Oct 17 18:55 id_dsa       #创建出来的私钥
-rw-r--r-- 1 root root 598 Oct 17 18:55 id_dsa.pub  #创建出来的公钥

在虚构机上设置操作系统等

本机连接主机,安装ansible和pip,再用pip安装贰个叫apache-libcloud,配置达成

  • 设置配备轻便,扶助各样措施安装(yum,git等)
  • 援助分类过滤管理主机
  • 轻量级,被管理端不要求安装特定agent(需有python、ssh境遇)
  • 模块众多,能够满意大家的须求
  • 开荒社区活泼
  • Ansible playbook 剧本
  • 支撑各类公有云、私有云平台
  • 基于Push推送格局,能够随时修改
  • 幂等性(已经存在的改换后的情况,再度实践那几个职务时,不会议及展览开任何改造)

应用 ssh 管理别的主机

1、生成秘钥 id_rsaid_rsa.pub

$ cd ~/.ssh/

$ ssh-keygen -t rsa

2、将公钥 id_rsa.pub 内容增多到其他主机的 ~/.ssh/authorized_keys 文件中

3、在 /etc/ansible/hosts 文件中加多须求管住的主机

$ sudo vi /etc/ansible/hosts

[swarm]
192.168.99.103  ansible_connection=ssh  ansible_ssh_user=docker

4、测量试验:管理别的主机成立 hello 文件夹

ansible all -a "mkdir hello"

前提:此外主机需安装 python,不然会报如下错误

docker@ManagerX:/etc/ansible$ ansible all -a "/bin/echo hello"
192.168.99.101 | FAILED! => {
   "changed": false,
   "module_stderr": "Shared connection to 192.168.99.101 closed.rn",
   "module_stdout": "/bin/sh: /usr/bin/python: not foundrn",
   "msg": "MODULE FAILURE",
   "rc": 0
}

TinyCoreLinux 安装的 python 实施命令在 /usr/local/bin/python 路线下,所以要软连接到 /usr/bin/python,命令如下:

sudo ln -s /usr/local/bin/python /usr/bin/python

再有一种办法,钦定 python 路径,编辑 /etc/ansible/hosts

[swarm]
192.168.99.103  ansible_connection=ssh  ansible_ssh_user=docker ansible_python_interpreter=/usr/local/bin/python

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

[[email protected] ~]# man ssh-copy-id
ssh-copy-id  -  install  your  public  key in a remote machine’s autho-rized_keys

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

[[email protected] ~]# rpm -qf `which ssh-copy-id`
openssh-clients-5.3p1-122.el6.x86_64

语法格式

ssh-copy-id [-i [identity_file]] [[email protected]]machine
-i       指定要分发的公钥文件以及路径信息
[[email protected]] 以什么用户身份进行分发
machine 将公钥分发到哪台主机上,远程主机IP地址

[[email protected] ~]# ssh-copy-id  -i /root/.ssh/id_dsa.pub  [email protected]172.16.1.41
The authenticity of host '172.16.1.41 (172.16.1.41)' can't 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.
[email protected]172.16.1.41's password:
Now try logging into the machine, with "ssh '[email protected]'", and check in

  .ssh/authorized_keys

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

2、自动化安顿和布署:

展开谷歌(Google)云调节台,创设凭据,得到json文件,并把它扔到主机里面

如图:

参照文书档案

  • Ansible粤语权威指南

1.1.3 第多少个里程碑: 基于密钥登入测验

[[email protected] ~]# ssh 172.16.1.41
Last login: Tue Oct 17 18:38:47 2017 from 10.0.0.1
[[email protected] ~]#

   基于密钥登录格局成功↑

[[email protected]01 ~]# ssh [email protected]172.16.1.41 "hostname -i"
172.16.1.41

决不的登入到长途主机直接推行命令,再次来到输出结果↑

说明:

管理主机一旦创制好秘钥对文件,给多少个主机分发公钥时,公钥文件一律

puppet(基于ruby)

运用ssh-keygen生成密钥对,并将公钥传入他和煦的authorized_key里面,同不时间也要把主机公钥传到Google云的ssh里面

图片 2

1.1.4 ssh服务分发公钥实质施行进程

①. 管理服务器创建私钥和公钥(密钥对

②. 将公钥文件远程传送复制到被管制伏务器对应用户~/.ssh/id_dsa.pub下,并修改.ssh目录权限为700

③. 修改公钥文件文件名为authorized_keys,授权权限为600

④. 利用ssh服务配置文件的配置参数,实行识别公钥文件authorized_keys

⑤. 进而落到实处基于密钥远程登入服务器(免密码登陆/非交互格局登入)

saltstack(基于Python)

下一场先河写playbook脚本(参照他事他说加以考察网站:)

  注:上航海用教室是从官方介绍摄像中的截图。用户通过ansible 自动化引擎, 使用playbook ,插件、模块去去管理被决定主机。并能够整合CMDB管理类别。

1.2 暗中认可端口号不是22,如何分发公钥

ansible(基于Python,轻量级)

 图片 3

二、Ansible运维情状

1.2.1 查询ssh-copy-id命令能够识破那是个本子文件

[[email protected] ~]# file `which ssh-copy-id `
/usr/bin/ssh-copy-id: POSIX shell script text executable

探望剧本内容开采传输格局

[[email protected] ~]# cat `which ssh-copy-id`|grep ssh
ssh $1 "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 || true)'" || exit 1

说明:

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

   2、判定客户端相应用户中有没有.ssh目录,若无.ssh 目录就进行创办

3、将管理端公钥文件内容加多到客户端~./ssh/authorized_keys, 默认authorized_keys文件不设有,需求创立,文件权限600

3、自动化实现管理和操作(供给批量推行某个命令)

 

1.ansible的设置支撑多种格局。

1.2.2 达成非22端口的分发

措施一: 修改脚本内容

ssh -p52113 $1 "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 || true)'" || exit 1

注脚:根据指令脚本,修改$1传参新闻,从而达成基于ssh不一样端口传送公钥文件

艺术二:将盛传的参数上增多上端口信息(推荐)

[[email protected] scripts]# ssh-copy-id -i /root/.ssh/id_dsa.pub "-p 52113 [email protected]"
Now try logging into the machine, with "ssh '-p 52113 [email protected]'", and check in:

  .ssh/authorized_keys

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

fabric(基于Python)

vars这中间的参数能够从创设实例后当中的命令行里面找到

法定建议:

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

func

gce里面的instancename自身能够改,也得以加上一行zone 钦定一下开立主机时候的区域

  • 如若你想在Red Hat Enterprise Linux (TM), CentOS, Fedora, Debian, or Ubuntu上,运维最新版本的Ansible版本,推荐应用包管理器,如yum,apt-get.
  • 对于别的安装选项,推荐应用pip 包管理器进行设置
  • 假如想要使用新型的效劳可以跟踪开荒版本,从github上开始展览git到地方,进行应用

1.2.3.1  编写脚本shift

[[email protected] scripts]# cat shift.sh
#!/bin/bash

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

测试

[[email protected] scripts]# sh shift.sh 1 2 3 4 5 6
1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6

说明:

shift命令用于对参数的移动(左移),平常用于在不知底传入参数个数的动静下一壹回历每一种参数然后开展对应管理(常见于Linux中各个程序的开发银行脚本)。

ssh-copy-id -i /root/.ssh/id_dsa.pub "-p 52113 [email protected]"

是因为/usr/bin/ssh-copy-id 脚本中后边使用了三个shift 全体原先该为$3的参数变为了$1.

if [ "-i" = "$1" ]; then
  shift
  # check if we have 2 parameters left, if so the first is the new ID file
  if [ -n "$2" ]; then
    if expr "$1" : ".*.pub" > /dev/null ; then
      ID_FILE="$1"
    else
      ID_FILE="$1.pub"
    fi
    shift         # and this should leave $1 as the target name
  fi
else

ansible

tags的话,写成这么

2.调节机要求:

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

4、自动化达成程序发表

图片 4

  Ansible 能够运转在有python 2.6照旧2。7情况的类unix 景况。windows 暂不帮忙

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

#for 循环

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

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

while [ture]
do
      xxx
done

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

until [ture]
do
   xxx
done

接下去便是等它22端口开启,然后把这几个新建好的实例放在group里面

3.被调控节点供给

1.3.2 完成机关分发公钥,远程管理多台主机的阻拦因素?

01.创设秘钥对急需开始展览交互

  a.须求承认秘钥保存路线

  b.需求承认密码音信

02.分发公钥时须求张开互动

  a.须求开始展览确认yes|no

  b.先是次分发公钥要求进行密码验证

ansible特性

ok,实例创立实现,能够以root格局连接节点了

  调整节点须要和 Ansible 被调节节点通信,平日选择ssh 进行延续。其它也急需python碰着。

1.3.3 消除阻碍因素

1.机关保存路线,并且不密码

ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q

参数表明:

-f filename     Specifies the filename of the key file.
                  指定密钥文件保存的路径信息(免交互)

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

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

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

2.消除分发公钥时需求张开的交互

sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub " [email protected]$ip  -o StrictHostKeyChecking=no "

参数表达:

-o   option   选择 (man 手册中可以查到有很多选项)
StrictHostKeyChecking=no 对询问的回应(不进行对密钥检查)

要贯彻免密码,要求一款软件 sshpass  该软件正是为ssh提供密码使用的

[[email protected] ~]# yum install  sshpass  -y

只顾:密码与 -p之间不能够有空格

模块化:使用ansible时,调用特定模块,达成一定职责

三、Ansible 安装

1.3.4 最后批量分发脚本内容

[[email protected] scripts]# vim ssh-key.sh 
#!/bin/bash
. /etc/rc.d/init.d/functions

# 创建密钥
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 0 ];then
action  "fenfa 172.16.1.$ip"  /bin/true
else
action  "fenfa 172.16.1.$ip"  /bin/false
fi
echo ""
done

本子推行效果:

[[email protected] scripts]# sh ssh-key.sh
fenfa 172.16.1.31                                          [  OK  ]
fenfa 172.16.1.41                                          [  OK  ]
fenfa 172.16.1.8                                           [  OK  ]

说明:

   脚本中引用 . /etc/rc.d/init.d/functions 函数,能够体现推行结果的决断。

   使用if语句进行剖断,action 实施相应的动作。true/false

依赖Python实现:主要调用 Paraniko、PyYAML和jinja2 这八个模块完成

1.调整管理机安装(安装格局有三种,源码,pip等艺术),大家那边运用git 源码安装方式开始展览配备

1.3.5 完结基于密钥的批量管制脚本

[[email protected] scripts]# vim piliang_guanli.sh 
#!/bin/bash
CMD=$1

for ip in 8 31 41
do
echo ========host 172.16.1.$ip=======
ssh [email protected]172.16.1.$ip "$CMD"
echo ============END===============
echo ""
done

剧本推行成效:

[[email protected] scripts]# sh piliang_guanli.sh  date
======172.16.1.8======
Thu Oct 19 16:25:08 CST 2017
=========END=============


======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=============

据他们说密钥登入方式,分发的公钥文件会识别用户消息,所以能够落到实处免密码批量管制。

是因为是agentlsss,铺排特别轻便

[root@docker ~]# git clone git://github.com/ansible/ansible.git --recursive
[root@docker ~]# cd ansible/

第2章 ansible软件介绍

  • python 语言是运行人士必须会的语言
  • ansible 是二个依据python 开荒的自动化运转为工人身份具
  • 其成效落成基于ssh远程连接服务
  • ansible 可以兑现批量系统布局,批量软件计划,批量文书拷贝,批量运转命令等效果

除了ansible之外,还有saltstack 等批量处理软件

帮忙自定义模块

实行源码安装

2.1 自动化批量管理方法评释

支持playbook

[root@docker ansible]# make && make install

2.1.1 ssh key方式的验证

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

    SSH免密码登陆地集散地于用户的,最佳不用跨不一样的用户

    SSH连接慢消除;即修改sshd_config配罝文件参数音信

    批量散发一千台初始都亟需输入三回密码,并且第叁回一连要认同(expect/sshpass)

    expect批量处理服务器参考

ansible职责实施流程

先安装pip包管理工科具,然后安装ansible 程序所运用的多少个python模块

2.1.2 集团级生产场景批量管制-自动化管理方案

①.最轻易易行/最常用/最庞大的选拔是ssh key shell/pssh方案,一般中型迷你型公司会用(50-100台以下规模公司)

     a.利用ssh key实施命令,并将指令放在脚本里面

     b.利用ssh key实施命令,将下令放在脚本里面,并充分相应循环语句或判别语句

②.sina cfengine/puppet较早的批量管理工科具;今后基本上未有公司用

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

④.saltstack批量处理工科具;特点:轻松,功用强大(配罝复杂>---建筑英才网/BlackBerry/一些CDN公司批量管理路径:ssh key-->cfengine-->puppet-->saltstack/ansible

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

图片 5

[root@docker ansible]# easy_install pip
[root@docker ansible]# pip install paramiko PyYAML Jinja2 httplib2 six

2.1.3 怎样成功成集群规模架构一键自动化达成(步骤表达)

①.1台服务器先安顿好(kickstart,cobbler无人值班守护安装)。高等达成云总计(按需分配,动态调度)(openstack,kvm)

②.linux基本优化,包括ssh服务(能够自动化落成)。

  创设密钥消息(自动化免交互创设)

ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa >/dev/null 2>&1

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

⑤.ansible软件设置(能够自动化达成)

⑥.网络服务自动化安装(ansible完结)

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

ansible用二种颜色来表示命令的执行结果

更新ansible 代码时用到的两条命令

2.2 ansible软件特点概述

l 没有供给单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端

l 无需服务端(no sever)

l 须求信赖大批量的模块达成批量管理

l 配置文件 /etc/ansible/ansible.cfg (先前年代不用配置)

ansible软件相关仿照效法链接新闻

假若回到 金红:表示实行结果特别,平日会停下剩余全数职务

[root@docker ansible]# git pull --rebase
Current branch devel is up to date.
[root@docker ansible]# git submodule update --init --recursive

2.2.1 ansible软件中查看模块相关消息格局

[[email protected] ~]# ansible-doc -l
列出所有模块信息

[[email protected] ~]# ansible-doc -s cron 
参看指定模块的帮助

一旦回去 铁锈色:表示实施结果不奇怪,且在指令实施完结后目标有境况上的更换

2.检核查明

2.3 部署ansible软件

要是回去 月光蓝:表示试行结果符合规律,且在指令实践实现后目的未有动静上的生成

[root@docker ansible]# ansible --version
ansible 2.3.0
  config file =
  configured module search path = Default w/o overrides

2.3.1 第一个里里程碑:安顿ssh key免密码登入格局

参见第一章内容


三、配置Ansible 尝试下管理主机

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

[[email protected] ~]# yum install libselinux-python -y

   该软件是用来对selinux实行安装的,确认保障即便服务器selinux服务开启,照旧能够通过ansible 软件管理。

ansible在采纳时,平时先将管理机的公钥发送到远程主机上去,假如远程主机数量过多,手动增加过去麻烦,推荐应用脚本达成

1.暗许配置文件在你git下载源码的目录ansible目录中

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

[[email protected] ~]# yum install ansible -y

软件安装实现,举办修改ansible下的hosts文件,注意文件的路子

[[email protected] ~]# vim /etc/ansible/hosts
[oldboy]
172.16.1.31
172.16.1.41
172.16.1.8

文件消息表达:

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

2.主机(hosts)部分能够选拔域名、主机名、IP地址表示;一般此类配置中Dolly用IP地址;

3.组名下的主机地址就是ansible能够管理的地方

至此ansible 服务就配备到位

方法一:将所有IP地址写入一个文件中(比如这里的/etc/ansible/shell/ip.txt)
#! /bin/bash

read -p "请输入用户名: " user
read -p "请输入密码: " password

#产生密钥对
ssh-keygen -t rsa -P ''

#检查sshpass是否按照
rpm -q sshpass &> /dev/null

if [ $? -eq 0 ];then
    echo "command sshpass installed"
else
    yum -y install sshpass &> /dev/null
fi

#开始批量向远程主机发送公钥
while read Line
do
    sshpass -p $password ssh-copy-id $user@$Line
done < /etc/ansible/shell/ip.txt
###########################################################
#2017年7月19日在公司使用ansible主机向远程主机推送公钥时报错如下:
#Host key verification failed.
#解决方案:vi /etc/ssh/ssh_config,将StrictHostKeyChecking ask改为StrictHostKeyChecking no
#之后重启ssh服务
#原理:ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。

方法二:用通过shell脚本和expect方式
先定义一个脚本 将所有IP地址写入一个文件中(比如这里的/etc/ansible/shell/ip.txt)
# vim send_plubic_key2.sh
#! /bin/bash
while read Line
do
        expect /etc/ansible/shell/send_plubic_key2.exp $Line
done < /etc/ansible/shell/ip.txt

在定义expect脚本
# vim send_plubic_key2.exp
#! /usr/bin/expect -f

set ipaddr [lindex $argv 0]
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ipaddr
expect {
"password:" { send "appmonr" }
}
expect eof
/root/ansible/bin/ansible

2.4 查看ansible软件相关音讯


2.创办hosts存放目录,并编辑hosts文件

2.4.1 ansible施行布置地方规划

服务器名称

网卡eth0

网卡eth1

用途表达

m01

10.0.0.61

172.16.1.61

批量管战胜务器

nfs01

10.0.0.31

172.16.1.31

nfs分享积累服务器

backup

10.0.0.41

172.16.1.41

rsync备份服务器

web01

10.0.0.8

172.16.1.8

web服务器

表明:无特殊情形,子网掩码为255.255.255.0

ansible常用模块

[root@docker ansible]# mkdir -pv /etc/ansible/
mkdir: created directory '/etc/ansible/'

2.4.2 ansible软件的版本消息

[[email protected] ~]# ansible --version
ansible 2.3.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]

1、copy模块 :复制文件到长途主机

从安装文件中,拷贝hosts

2.4.3 软件最近第一会用到的文书

[[email protected] ~]# rpm -ql ansible
/etc/ansible/hosts            #定义anisble软件可以管理的主机信息
/usr/bin/ansible              #ansible执行命令
/usr/bin/ansible-playboot   # ansible执行剧本命令
copy模块参数如下:

backup: #在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content: #用于替代“src”,可以直接设定指定文件的值
dest: #必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode: #递归设定目录的权限,默认为系统默认权限
force: #如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:#所有的file模块里的选项都可以在这里使用
group # 复制到远程主机后,指定文件或目录的属
mode # 复制到远程主机后,指定文件或目录权限,类似与 `chmod’指明如 0644
owner # 复制到远程主机后,指定文件或目录属主
src:#被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这
      种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,
      类似于rsync。
[root@docker ansible]# cp /root/ansible/examples/hosts /etc/ansible/.

2.4.4 /etc/ansible下的公文

[[email protected] ansible]# ll
total 28
-rw-r--r-- 1 root root 18066 Sep  6 06:38 ansible.cfg  #ansible配置文件
-rw-r--r-- 1 root root  1016 Sep  6 06:38 hosts       #定义ansible可以管理的主机信息
drwxr-xr-x 2 root root  4096 Sep  6 06:38 roles   #主要在自动化的时候部署多台主机时使用

    例子:将地方文件“/etc/ansible/ansible.cfg”复制到远程服务器,设置属主和属组及文件权限

编写hosts文件,添加1个主机

2.5 ansible软件的应用/参数

# ansible storm_cluster -m copy -a “src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644″

3.创建俩docker 容器吧

2.5.1 ansible远程批量实行命令

语法:

    ansible oldboy -a "uptime"

   ansible oldboy -m command -a "uptime"

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

说明:-m 钦点使用的模块

      -a 钦点使用模块中相应的下令参数

      命令参数只好是中央命令,并不扶助管道操作

      all   为hosts文件中的组整体处理

 图片 6

图2-1 ansible命令语法格式示意图

2、file模块: 设置文件属性

[root@docker ~]# docker run -d -it --name centos-1 centos_sshd_1
b032a6c8b4014837181029059661104373db8a6190a1f854ae5ff701b961a546

[root@docker ~]# docker run -d -it --name centos-2 centos_sshd_1
cc647f916437df70b54096bcf676804114d1558124234b7716aee68271414f27

2.5.2 未分发公钥怎么样贯彻远程管理主机及钦命ansible端口新闻

计划hosts文件时计划上密码

vim /etc/ansible/hosts

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

IP:端口 用户 密码

[znix]
www.znix.top:52113 ansible_ssh_user=znix

点名端口 用户名

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

[[email protected] ~]# ansible znix -m ping
www.znix.top | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
file模块参数如下:

force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的
软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归设置文件的属性,只对目录有效
src:被链接的源文件路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,就创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件

容器创造完,暗中认可已经运转了sshd 服务开启22端口(这里可以查阅后续笔者发的Docker 自定义镜像的篇章),我们查阅下它们的ip

2.6 ansible软件常用参数表

命令参数

参数说明

-m  MODULE_NAME

-module-name=MODULE_NAME

module name to execute (default=command)

相应名称的模块被执行(默认模块为command );

-m后边是模块的名宇

-a MODULE_ARGS

-args=MODULE_ARGS

module arguments

模块参数信息

-a后面是要执行的命令;也可以写个ip ,针对台机器来执行命令

-C, -checks

don't make any changes, instead, try to predict some of the changes that may

occurs

不做任何改变;反而,只是尝试预言些可能出现的改变

-syntax-checks

perform a syntax check on the playbook, but do not execute ii*>

执行语法检查在剧本上,但是并不执行剧本

事例:远程文件符号链接创设

[root@docker ~]# docker exec centos-1 hostname -I
172.17.0.2 
[root@docker ~]# docker exec centos-2 hostname -I
172.17.0.3 

2.6.1 ansible命令试行结果色彩表达:

  天灰:表示不曾发出别的变动

  群青:实践命令操作出现至极

  威哈Rees堡红:试行命令后,对受控主机爆发耳濡目染,爆发了安插退换

# ansible storm_cluster -m file -a “src=/etc/resolv.conf dest=/tmp/resolv.conf state=link”
src表示已经存在的文件,dest表示创建的软连接的文件名,最后的state状态为link

4.将上面2个被调节主机的ip 加多到 hosts 文件中,并拓展通讯测验

第3章 ansible中的模块表达

事例:远程文件符号链接删除

张开/etc/ansible/hosts文件,在最终依照以下格式增多。

3.1 ping 模块:测验连通性

[[email protected] ~]# ansible all -m ping 
172.16.1.8 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.16.1.41 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.16.1.31 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

   连接寻常重回 pong 通过帮扶信息方可拿走 ↓

经过 ansible-doc -v ping 能够得到该模块的验证

ansible-doc -s file   参看模块的具体音信

[[email protected] ~]# ansible-doc -v ping
Using /etc/ansible/ansible.cfg as config file
> PING    (/usr/lib/python2.6/site-packages/ansible/modules/system/ping.py)

  A trivial test module, this module always returns `pong' 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.
# ansible storm_cluster -m file -a “path=/tmp/resolv.conf state=absent”
[cenots_group]
172.17.0.2
172.17.0.3

3.2 command 模块 私下认可模块

3、fetch模块:文件拉取模块,首若是将长途主机中的文件拷贝到本机中

增加完毕后,在决定主机上应用 ping 模块进行测量检验,如下:(约定:被控主机称为client,调节主机称为managent,以下类似)

3.2.1 command命令常用参数说明

参数

参数说明

chdir

在执行命令之前,通过cd命令进入到指定目录中

# ansible oldboy -m command -a "chdir=/tmp ls"

create

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤

executable

改变shell使用command进行执行,并且执行时要使用绝对路径

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

warn

(added in 1.8)

如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令

不点超模块的时候暗中认可使用的模块正是command  ↓

[[email protected] ~]# ansible all -a "date"
172.16.1.41 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:15 CST 2017

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

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

选取ansible自带模块实施命令 若是要用 > < | & ' ' 使用shell模块

[[email protected] ~]# ansible all -m command -a "date"
172.16.1.8 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:27 CST 2017

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

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

chdir参数的利用:

[[email protected] ~]# ansible oldboy -m command -a "chdir=/tmp pwd"
172.16.1.31 | SUCCESS | rc=0 >>
/tmp

172.16.1.8 | SUCCESS | rc=0 >>
/tmp

172.16.1.41 | SUCCESS | rc=0 >>
/tmp

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

[[email protected] ~]# ansible oldboy -m command -a "creates=/etc/hosts date"
172.16.1.31 | SUCCESS | rc=0 >>
skipped, since /etc/hosts exists

removes 文件是或不是留存,不设有就不推行命令,

[[email protected] ~]# ansible oldboy -m command -a "removes=/etc/hosts date"
172.16.1.31 | SUCCESS | rc=0 >>
Fri Oct 20 13:32:40 CST 2017
fetch模块参数如下:
和copy模块的作用刚刚相反,并且在保存的时候使用hostname来进行保存,当文件不存在的时候,会出现错误,除非设置了选项fail_on_missing为yes

Dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile
Fail_on_missing: Yes/no,当源文件不存在的时候,标识为失败
Flat: 允许覆盖默认行为从hostname/path到/file的,如果dest以/结尾,它将使用源文件的基础名称
Src: 在远程拉取的文件,并且必须是一个file,不能是目录
Validate_checksum Yes/no,当文件fetch之后进行md5检查

  全部主机:

3.3 shell模块 万能模块

实施linux命令时能够用

长距离节点实施命令

   说明: shell 模块在长距离执行脚本时,远程主机上必将在有相应的脚本

[[email protected] ~]# ansible oldboy -m shell -a "/bin/sh /server/scripts/ssh-key.sh"
172.16.1.31 | SUCCESS | rc=0 >>
fenfa 172.16.1.31 [  OK  ]

fenfa 172.16.1.41 [  OK  ]

fenfa 172.16.1.8 [  OK  ]

事例:从远程主机上拉取文件到本机

[root@docker ~]# ansible '*' -m ping --ask-pass
SSH password: 
172.17.0.3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.17.0.2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

3.4 script 模块 试行脚本模块

在本土实施脚本时,将脚本中的内容传输到长途节点上运维

[[email protected] ~]# ansible all -m script -a "/server/scripts/free.sh"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "rc": 0,
    "stderr": "Shared connection to 172.16.1.8 closed.rn",
    "stdout": "             total       used       free     shared    buffers     cachedrnMem:          474M       377M        97M       532K        54M       202Mrn-/  buffers/cache:       120M       354MrnSwap:         767M         0B       767Mrn",
    "stdout_lines": [
        "             total       used       free     shared    buffers     cached",
        "Mem:          474M       377M        97M       532K        54M       202M",
        "-/  buffers/cache:       120M       354M",
        "Swap:         767M         0B       767M"
    ]
}

说明:

动用scripts模块,不用将脚本传输到长途节点,脚本自个儿不用进行授权,就可以使用script模块实践。直接实行脚本就可以,不须要运用sh

# ansible server -m fetch -a “src=/root/123 dest=/root
src表示为远程主机上需要传送的文件的路径,dest表示为本机上的路径,在传送过来的文件,是按照IP地址或hostname进行分类,然后路径是源文件的路径,例如上面的最终路径为/root/192.168.1.60/root/123在拉取文件的时候,必须拉取的是文件,不能拉取文件夹

  钦赐组的办法:

3.5 copy模块 把当麻芋果件发送到远端

事例:钦定路线目录实行保存

[root@docker ~]# ansible centos_group -m ping --ask-pass
SSH password: 
172.17.0.2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.17.0.3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

3.5.1 copy模块常用参数

选项参数

选项说明

backup(重要参数)

在覆盖远端服务器文件之前,将远端服务器源文件备份,备份文件包含时间信息。有两个选项:yes|no

content

用于替代"src”,可以直接设定指定文件的值

dest

必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

directory_mode

递归设定目录的权限,默认为系统默认权限

forces

如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖。

如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes。别名:thirsty

others

所有的file模块里的选项都可以在这里使用

src

被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

mode

定义文件或目录的权限;注意:是4位

owner

修改属主

group

修改属组

表达: src和content不能够而且使用

# ansible pythonserver -m fetch -a “src=/root/Ssh.py dest=/root/kel/ flat=yes”
在使用参数为flat的时候,如果dest的后缀名为/,那么就会保存在目录中,然后直接保存为文件名,如上例的结果为 dest”: “/root/kel/Ssh.py;
当dest后缀不为/的时候,那么就会直接保存为kel的文件,如上例1所示。主要是在于dest是否已/结尾,从而来区分这是个目录还是路径。

  钦点单个主机的办法:

3.5.2 copy常用命令参数测量试验

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

[[email protected] ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=oldboy group=oldboy "
172.16.1.8 | SUCCESS => {
    "changed": true,
    "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
    "dest": "/tmp/hosts",
    "gid": 500,
    "group": "oldboy",
    "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
    "mode": "0600",
    "owner": "oldboy",
    "size": 357,
    "src": "/root/.ansible/tmp/ansible-tmp-1508410846.63-224022812989166/source",
    "state": "file",
    "uid": 500
}
……

检查结果

[[email protected] ~]# ansible all -m shell -a "ls -l /tmp/hosts"
172.16.1.31 | SUCCESS | rc=0 >>
-rw------- 1 oldboy oldboy 357 Oct 19 19:00 /tmp/hosts

172.16.1.41 | SUCCESS | rc=0 >>
-rw------- 1 oldboy oldboy 357 Oct 11 15:12 /tmp/hosts

172.16.1.8 | SUCCESS | rc=0 >>
-rw------- 1 oldboy oldboy 357 Oct 19 19:00 /tmp/hosts

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

[[email protected] ~]# ansible oldboy -m copy -a " src=/server/scripts/ssh-key.sh  dest=/tmp/ remote_src=true"
172.16.1.41 | SUCCESS => {
    "changed": true,
    "checksum": "d27bd683bd37e15992d2493b50c9410e0f667c9c",
    "dest": "/tmp/ssh-key.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "dc88a3a419e3657bae7d3ef31925cbde",
    "mode": "0644",
    "owner": "root",
    "size": 397,
    "src": "/server/scripts/ssh-key.sh",
    "state": "file",
    "uid": 0
}

概念文件中的内容 content=oldboyedu.com 暗中同意未有换行

[[email protected] ~]# ansible oldboy -m copy -a "content=oldboyedu.com dest=/tmp/oldboy666.txt"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "checksum": "291694840cd9f9c464263ea9b13421d8e74b7d00",
    "dest": "/tmp/oldboy666.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "0a6bb40847793839366d0ac014616d69",
    "mode": "0644",
    "owner": "root",
    "size": 13,
    "src": "/root/.ansible/tmp/ansible-tmp-1508466752.1-24733562369639/source",
    "state": "file",
    "uid": 0
}

4、assemble模块:文件组装模块,主假如将多份配置文件组装为一份配置文件。

[root@docker ~]# ansible '172.17.0.3' -m ping --ask-pass
SSH password: 
172.17.0.3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

3.6 file模块 设置文件属性

assemble模块参数如下:

Backup:Yes/no 是否创建备份文件,使用时间戳
Delimiter:配置文件内容之间的分隔符
Dest:目的文件用来连接所有的源文件
Follow:Yes/no 表示文件系统的链接,如果存在,应该follow
Group:文件所属组,相当于chown
Mode:文件属性,0644,记住保留前面的0
Owner:文件所属用户
Regexp:组装的时候是否匹配相关的文件进行组合
Remote_src:True/False,False表示src文件在本机上,True表示src在远程主机上
Src:已经存在的目录文件

释疑:ansible 命令后边,跟的首先个参数,也正是大家hosts 文件之中的主机清单(能够钦命单个主机ip,也足以是组,也协助正则匹配); 第一个参数是利用-m 钦点模块,这里大家用了 ping模块。 --ask-pass 这几个是当大家选取主机密码来开始展览ssh认证时的参数,多次输入后,会感觉相比辛劳。推荐应用密钥的办法,安全又有益于。上边说下怎么着用公钥

3.6.1 file模块常用参数

参数

参数表达

owner

安装复制传输后的数量属主新闻

group

设置复制传输后的数码属组音信

mode

设置文件数量权限音讯

dest

要成立的文本或目录命令,以及路线音讯

src

点名要开创软链接的文书音信

state

state参数音讯

directory

始建目录

file

成立文件

link

开创软链接

hard

创办出硬链接

absent

目录将被递归删除以及文件,而链接将被吊销链接

touch

开创文件;假使路线不设有将创立两个空文件

注意:重命名和开创多级目录无法同一时间落到实处

事例:将本机上的安排文件组装发送到远程主机

5.选取密钥来张开ssh 远程访问

3.6.2 常用参数测量试验

成立目录

[[email protected] ~]# ansible oldboy -m file -a "dest=/tmp/oldboy_dir state=directory"
172.16.1.41 | SUCCESS => {
    "changed": true,
    "gid": 0,
    "group": "root",
    "mode": "0755",
    "owner": "root",
    "path": "/tmp/oldboy_dir",
    "size": 4096,
    "state": "directory",
    "uid": 0
}

开创文件

[[email protected] ~]# ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "dest": "/tmp/oldboy_file",
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "state": "file",
    "uid": 0
} 

创办软连接

[[email protected] ~]# ansible oldboy -m file -a "src=/tmp/oldboy_file dest=/tmp/oldboy_file_link state=link"
172.16.1.41 | SUCCESS => {
    "changed": true,
    "dest": "/tmp/oldboy_file_link",
    "gid": 0,
    "group": "root",
    "mode": "0777",
    "owner": "root",
    "size": 16,
    "src": "/tmp/oldboy_file",
    "state": "link",
    "uid": 0
}

剔除目录文件消息

[[email protected] ~]# ansible oldboy -m file -a "dest=/tmp/oldboy_dir state=absent"
172.16.1.41 | SUCCESS => {
    "changed": true,
    "path": "/tmp/oldboy_dir",
    "state": "absent"

[[email protected] ~]# ansible oldboy -m file -a "dest=/tmp/oldboy_file state=absent"
172.16.1.31 | SUCCESS => {
    "changed": true,
    "path": "/tmp/oldboy_file",
    "state": "absent"

始建多级目录

[[email protected] ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/01/0/0/0/0/0/0/0/"
172.16.1.31 | SUCCESS => {
    "changed": true,
    "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
    "dest": "/tmp/01/0/0/0/0/0/0/0/hosts",
    "gid": 0,
    "group": "root",
    "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
    "mode": "0644",
    "owner": "root",
    "size": 357,
    "src": "/root/.ansible/tmp/ansible-tmp-1508466973.39-99676412390473/source",
    "state": "file",
    "uid": 0
}

在意:重命名和创办多级目录不可能而且落到实处

# ansible pythonserver -m assemble -a “src=/root/kel/ dest=/tmp/kel.conf remote_src=False”
在本机目录/root/kel的文件进行组装,发送到远程配置文件/tmp/kel.conf中,在此注意参数remote_src为False表示组装本机的配置文件,如果在本机目录中不存在文件,那么将会显示Python代码和乱码

先在management 上转移公钥私钥对

3.7 fetch 模块  拉取文件

5、command模块:在长距离主机上施行命令

[root@docker ~]# ssh-keygen -t rsa -C "management"

3.7.1 fetch常用参数表达

参数

参数说明

dest

将远程主机拉取过来的文件保存在本地的路径信息

src

指定从远程主机要拉取的文件信息,只能拉取文件

flat

默认设置为no,如果设置为yes,将不显示172.16.1.8/etc/信息

Command不适用于有shell变量的情形,也不适用于有管道符也许&&的情状,假使要使用此种情状,那么能够应用shell模块

将公钥放到使用 ssh-copy-id命令,上传到client 上边去。

3.7.2 常用参数实例

从远程拉收取来文件

[[email protected] cp]# ansible oldboy -m fetch -a "dest=/tmp/backup src=/etc/hosts"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
    "dest": "/tmp/backup/172.16.1.8/etc/hosts",
    "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
    "remote_checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
    "remote_md5sum": null
}

[[email protected] 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 参数,拉去的时候不创制目录(同名文件会覆盖)

[[email protected] tmp]# ansible oldboy -m fetch -a "dest=/tmp/backup/ src=/etc/hosts flat=yes"
172.16.1.8 | SUCCESS => {
    "changed": false,
    "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
    "dest": "/tmp/backup/hosts",
    "file": "/etc/hosts",
    "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308"
参数如下:

creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
[root@docker ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.2

[root@docker ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.17.0.3

3.8 mount模块 配置挂载点模块

事例:查看远程服务器的负载音信

现行反革命再试下管理命令,不用输入密码了

3.8.1 mount模块常用参数

参数

参数表明

fstype

点名挂载文件类型 -t nfs == fstype=nfs

opts 

设定挂载的参数选项音讯 -o ro  == opts=ro

path 

挂载点路径          path=/mnt

src  

要被挂载的目录消息  src=172.16.1.31:/data

state 

state状态参数

unmounted

加载/etc/fstab文书 完成卸载

absent  

在fstab文件中剔除挂载配置

present 

在fstab文件中增多挂载配置

mounted

1.将挂载音讯增加到/etc/fstab文件中

2.加载布局文件挂载

# ansible storm_cluster -m command -a “uptime”
[root@docker ~]# ansible centos_group -a "/bin/echo Hello world"
172.17.0.3 | SUCCESS | rc=0 >>
Hello world

172.17.0.2 | SUCCESS | rc=0 >>
Hello world

3.8.2 mount参数实例

挂载

[[email protected] tmp]# ansible 172.16.1.8 -m mount -a "fstype=nfs opts=rw path=/mnt/  src=172.16.1.31:/data/ state=mounted"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "dump": "0",
    "fstab": "/etc/fstab",
    "fstype": "nfs",
    "name": "/mnt/",
    "opts": "rw",
 "passno": "0",
  "src": "172.16.1.31:/data/"
}

卸载

[[email protected] tmp]# ansible 172.16.1.8 -m mount -a "fstype=nfs opts=rw path=/mnt/  src=172.16.1.31:/data/ state=unmounted"
172.16.1.8 | SUCCESS => {
   "changed": true,
    "dump": "0",
    "fstab": "/etc/fstab",
    "fstype": "nfs",
    "name": "/mnt/",
    "opts": "rw",
    "passno": "0",
    "src": "172.16.1.31:/data/"
}

6、shell模块:切换来某些shell试行内定的命令,与command区别的是,此模块能够补助命令管道,同一时间还会有另三个模块也具备此意义:raw

 ok,等下二回学习Inventory(能源清单)时,再来共享呢。

3.9 cron模块 按期职责

参数如下:

chdir # 执行之前,先cd到指定目录在执行命令
creates # 一个文件名,当这个文件存在,则该命令不执行
executable # 切换shell来执行命令,需要使用命令的绝对路径
free_form= # 执行的命令
removes # 一个文件名,这个文件不存在,则该命令不执行

注:ansible是第四回起首写的连载种类小说,假设喜欢能够关心哦。假设感觉有倒霉的地方,一定要不吝赐教哈。小编会特别特别多谢的。其余,若是您以为本文对你有支持,招待转发,但无法不要注解出处啊。

3.9.1 cron模块常用参数

参数

参数表达

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     

职业 ;要做的事体

name    

Plateform使用ansible创建新实例,运维工具。概念定时职分的陈说新闻

disabled

表明定期职责

state   

state 状态参数

absent

删去按时职分

present

始建定期职责

默认为present

事例:远程实行shell脚本

行使 Ansible 高效交付 Docker 容器  http://www.linuxidc.com/Linux/2015-10/124233.htm

3.9.2 cron模块参数施行

加多定期职务

[[email protected] ~]# ansible oldboy -m cron -a "minute=0 hour=0 job='/bin/sh  /server/scripts/hostname.sh &>/dev/null' name=oldboy01"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "envs": [],
    "jobs": [
     "oldboy01"
    ]
}

删除定时职分

[[email protected] ~]# ansible oldboy -m cron -a "minute=00 hour=00 job='/bin/sh  /server/scripts/hostname.sh &>/dev/null' name=oldboy01 state=absent"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "envs": [],
    "jobs": []
}

只用名字就足以去除

[[email protected] ~]# ansible oldboy -m cron -a "name=oldboy01  state=absent"
172.16.1.31 | SUCCESS => {
    "changed": true,
    "envs": [],
    "jobs": []
}

批注定时职分

   注意: 注释定期职责的时候必须有job的参数

[[email protected] ~]# ansible oldboy -m cron -a "name=oldboy01 job='/bin/sh  /server/scripts/hostname.sh &>/dev/null'  disabled=yes"
172.16.1.31 | SUCCESS => {
    "changed": true,
    "envs": [],
    "jobs": [
    "oldboy01"
    ]
}

注销注释

[[email protected] ~]# ansible oldboy -m cron -a "name=oldboy01 job='/bin/sh  /server/scripts/hostname.sh &>/dev/null'  disabled=no"
172.16.1.41 | SUCCESS => {
    "changed": true,
    "envs": [],
   "jobs": [
       "oldboy01"
    ]
}

3.10  yum 模块

# ansible storm_cluster -m shell -a “/tmp/rocketzhang_test.sh”

行使Ansible批量管理远程服务器  http://www.linuxidc.com/Linux/2015-05/118080.htm

3.10.1 yum 模块常用参数

参数

参数说明

name=name    

指定安装的软件

state=installed

安装

7、service模块:系统服务管理

Ansible安装配备与简便利用  http://www.linuxidc.com/Linux/2015-07/120399.htm

3.10.2 yum模块参数施行

[[email protected] ~]# ansible oldboy -m yum -a "name=nmap state=installed  "
172.16.1.31 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror, securitynSetting up Install ProcessnLoading mirror speeds from cached hostfilen * base: mirrors.aliyun.comn * epel: mirrors.aliyun.comn * extras: mirrors.aliyun.comn * updates: mirrors.aliyun.comnResolving Dependenciesn--> Running transaction checkn---> Package nmap.x86_64 2:5.51-6.el6 will be installedn--> Finished Dependency ResolutionnnDependencies Resolvednn================================================================================n Package        Arch             Version                   Repository      Sizen================================================================================nInstalling:n nmap           x86_64           2:5.51-6.el6              base           2.8 MnnTransaction Summaryn================================================================================nInstall       1 Package(s)nnTotal download size: 2.8 MnInstalled size: 9.7 MnDownloading Packages:nRunning rpm_check_debugnRunning Transaction TestnTransaction Test SucceedednRunning Transactionnr  Installing : 2:nmap-5.51-6.el6.x86_64                                     1/1 nr  Verifying  : 2:nmap-5.51-6.el6.x86_64                                     1/1 nnInstalled:n  nmap.x86_64 2:5.51-6.el6                                                      nnComplete!n"
    ]
}
参数如下:

arguments # 向服务传递的命令行参数
enabled # 设置服务开机自动启动,参数为yes|no
name= # 控制服务的名称
pattern # 如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel # 设置服务自启动级别
sleep # 如果执行了restarted,则在stop和start之间沉睡几秒钟
state # 启动`started’ 关闭`stopped’ 重新启动 `restarted’ 重载 `reloaded’

在 CentOS 7 中装置并使用自动化学工业具 Ansible  http://www.linuxidc.com/Linux/2015-10/123801.htm

3.11 service模块 服务管理

事例:运维http服务,并加多到运行服务项中,设置开机运行

Ansible和Docker的效力和用法  http://www.linuxidc.com/Linux/2014-11/109783.htm

3.11.1 service模块常用参数表达

参数

参数说明

name=service name

服务的名称

state=参数

停止服务 服务状态信息为过去时

stared/stoped/restarted/reloaded

enabled=yes 

设置开机自启动

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

# ansible web -m service -a “name=httpd state=started enabled=yes ”

Ansible批量搭建LAMP情状 http://www.linuxidc.com/Linux/2014-10/108264.htm

3.11.2 service 模块参数实行

重启定时职责

[[email protected] ~]# ansible oldboy -m service -a "name=crond state=restarted"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "name": "crond",
    "state": "started"
}

8、cron模块:管理布署任务

Ansible :三个配置管理和IT自动化学工业具  http://www.linuxidc.com/Linux/2014-11/109365.htm

3.12 ansible中的常用模块

常用模块

模块说明

command  (重要模块)

执行命令模块,ansible命令执行默认模块

shell    (重要模块) 

行shell脚本模块

script   (重要模块)

把脚本发到客户端,然后执行;执行脚本命令在远端服务器上

copy      (重要模块)  

把本地文件发送到远端

file              

设定文件属性模块

services          

系统服务管理模块

cron              

计划任务管理模块

yum              

yum软件包安装管理模块

synchronize       

使用rsync同步文件模块

mount             

挂载模块

参数如下:

backup # 如果设置,创建一个crontab备份
cron_file # 如果指定, 使用这个文件cron.d,而不是单个用户crontab
day # 日应该运行的工作( 1-31, *, */2, etc )
hour # 小时 ( 0-23, *, */2, etc )
job # 指明运行的命令是什么
minute # 分钟( 0-59, *, */2, etc )
month # 月( 1-12, *, */2, etc )
name # 定时任务描述
reboot # 任务在重启时运行,不建议使用,建议使用special_time
special_time # 特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state # 指定状态,prsent表示添加定时任务,也是默认设置,absent表示删除定时任务
user # 以哪个用户的身份执行
weekday # 周 ( 0-6 for Sunday-Saturday, *, etc )

Ansible 的事无巨细介绍:请点这里
Ansible 的下载地址:请点这里

3.13 别的模块补充

事例:在钦定节点上定义贰个安顿职责,每隔3分钟到主要调控端更新叁回时间

本文长久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138104.htm

3.13.1 hostname 修改主机名模块

[[email protected] ~]# ansible 172.16.1.8 -m hostname -a "name=web01"
172.16.1.8 | SUCCESS => {
    "ansible_facts": {
        "ansible_domain": "etiantian.org",
        "ansible_fqdn": "www.etiantian.org",
       "ansible_hostname": "web01",
        "ansible_nodename": "web01"
    },
    "changed": false,
    "name": "web01"
}
# ansible all -m cron -a ‘name=”custom job” minute=*/3 hour=* day=* month=* weekday=* job=”/usr/sbin/ntpdate 172.16.254.139″‘

图片 7

3.13.2 selinux 管理模块

[[email protected] ~]# ansible 172.16.1.8 -m selinux -a "state=disabled"
172.16.1.8 | SUCCESS => {
    "changed": false,
    "configfile": "/etc/selinux/config",
    "msg": "",
    "policy": "targeted",
    "state": "disabled"
}

事例:新建四个cron文件

3.13.3 get_url 模块 == 【wget】

[[email protected] ~]# ansible 172.16.1.8 -m get_url -a "url=http://lan.znix.top/RDPWrap-v1.6.1.zip dest=/tmp/"
172.16.1.8 | SUCCESS => {
    "changed": true,
    "checksum_dest": null,
    "checksum_src": "ad402705624d06a6ff4b5a6a98c55fc2453b3a70",
    "dest": "/tmp/RDPWrap-v1.6.1.zip",
    "gid": 0,
    "group": "root",
    "md5sum": "b04dde546293ade71287071d187ed92d",
    "mode": "0644",
    "msg": "OK (1567232 bytes)",
    "owner": "root",
    "size": 1567232,
    "src": "/tmp/tmp4X4Von",
    "state": "file",
    "status_code": 200,
    "uid": 0,
    "url": "http://lan.znix.top/RDPWrap-v1.6.1.zip"
}

   url= 下载文件的地点 dest 下载到哪儿

   timeout 超时时间

   url_password   密码

   url_username  用户名

# ansible pythonserver -m cron -a “name=’for test’ weekday=’2′ minute=’0′ hour=12 user=’root’ job=’cat /etc/passwd >/root/111′ cron_file=’test ansible'”
新增一个任务,在目录/etc/cron.d/目录中,文件名称为test ansible,用户为root

第4章 ansible-playbook 剧本

9、yum模块:软件包安装管理

4.1 ansible基础知识部分补充

参数如下:

conf_file # yum的配置文件
disable_gpg_check # 关闭gpg_check
disablerepo # 不启用某个源
enablerepo # 启用某个源
List # 非幂等性命令
name= # 指定要安装的包,如果有多个版本需要指定版本,否则安装最新的包
state # 安装(`present’),安装最新版(`latest’),卸载程序包(`absent’)

4.1.1 ansible软件特点:

· 能够完成批量管制

· 能够完成批量布署

· ad-hoc(批量试行命令)---针对有时的操作

    ansible oldboy -m command -a "hostname"   <- 批量奉行命令举个例子

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

事例:明显一个包安装的是钦定版本,如下:

4.1.2 ansible大旨成效:

pyYAML-----用于ansible编写剧本所采取的语言格式(saltstack---python) 

rsync-ini语法  sersync-xml语法  ansible-pyYAML语法

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

Jinja2-----用来编写ansible的沙盘新闻 

        

# ansible server -m yum -a “name=acme-1.5 state=present”

4.2 ansible剧本编写准则表明

事例:安装二个风行版包:

4.2.1 pyYAML语准则则:

   规则一:缩进

    yaml使用一个恒定的缩进风格表示数据层结构关系,Saltstack要求各种缩晋等第由三个空格组成。一定不能够利用tab键

    注意:编写yaml文件,就忘记键盘有tab

       

    规则二:冒号

    CMD="echo"

    yaml:

    mykey:

    各个冒号后边必然要有三个空格(以冒号结尾没有必要空格,表示文件路线的模版能够不必要空格)

   

Plateform使用ansible创建新实例,运维工具。    规则三:短横线

    想要表示列表项,使用贰个短横杠加二个空格。多少个项应用同样的缩晋品级作为同四个列表的一有的

    大旨法则:有效的运用空格举行剧本的编辑,剧本编写是不协助tab的

# ansible server -m yum -a “name=acme state=latest”

4.3 剧本书写格式

### 剧本的开头,可以不写
- hosts: all         <- 处理所有服务器,找到所有服务器;  -(空格)hosts:(空格)all
tasks:             <- 剧本所要干的事情;                (空格)(空格)task:
- command: echo hello oldboy linux.  
  (空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能
 ansible all -m command -a "echo hello oldboy linux"     

    剧本编写内容扩展:剧本义务定义名称

- hosts: 172.16.1.7  <- 处理指定服务器                   -(空格)hosts:(空格)all
task:                <- 剧本所要干的事情;                (空格)(空格)task:
- name:
command: echo hello oldboy linux.                   
(空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能

事例:钦定repo来展开安装包

4.3.1 剧本格式示例

[[email protected] ansible-playbook]# vim rsync_sever.yml
- hosts: 172.16.1.41
  tasks:
    - name: install rsync
      yum: name=rsync state=installed
# ansible server -m yum -a “name=httpd enablerepo=kel state=present”
在指定源的时候,使用enablerepo,注意这个名字是配置文件/etc/yum.repo.d/目录中文件的section的名称,如下所示:
# cat rhel-source.repo |grep kel
[kel] name=kel
baseurl=file:///tmp/kel

4.4 剧本编写后检查办法

01:ansible-playbook --syntax-check 01.yml 

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

02:ansible-playbook -C 01.yml             

           --- 模拟剧本实行(彩排)

事例:更新具有安装包

4.4.1 语法检查

[[email protected] ansible-playbook]# ansible-playbook --syntax-check 01.yml
playbook: 01.yml
# ansible server -m yum -a “name=* state=latest

4.4.2 模拟剧本实行

[[email protected] ansible-playbook]# ansible-playbook -C 01.yml
PLAY [all] ****************************************************************

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=0    unreachable=0    failed=0
172.16.1.41                : ok=2    changed=0    unreachable=0    failed=0
172.16.1.8                 : ok=2    changed=0    unreachable=0    failed=0

事例:钦命rpm实行设置

4.5 剧本示例

# ansible server -m yum -a “name=/usr/local/src/kel.noarch.rpm state=present”

4.5.1 剧本编写内容扩充:剧本职分编写多少个职责

- hosts: all
  tasks:
    - name: restart-network
      cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
    - name: sync time
      cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

事例:钦定远程网站rpm实行安装

4.5.2 剧本编写内容增加:剧本职分编写多少个主机

- hosts: 172.16.1.7
  tasks:
    - name: restart-network
      cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
    - name: sync time
      cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
- hosts: 172.16.1.31
  tasks:
    - name: show ip addr to file
      shell: echo $(hostname -i) >> /tmp/ip.txt
# ansible server -m yum -a “name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6.0.el6.ngx.noarch.rpm state=present”

4.6 剧本编写格局

01 多主机单任务编写格局

02 多主机多职分编写格局

03 分化主机多职分编写情势

10、synchronize模块:使用rsync同步文件

第5章 常见错误

选拔rsync 模块,ansible主机以及远程主机必须安装rsync 包,不然不能够利用这么些模块

5.1 ansible编写剧本排错思路

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

  2. 开发剧本,定位特别问題原因,将剧本中的内容调换命令实施贰次

    cron: name=oldboy64 minute=ee hour=03 job='/bin/sh /server/scripts/test.sh &>/dev/null' ansible oldboy -m cron -a "name=oldboy64 minute=00 hour=03 job='/bin/sh /server/scripts/test.sh &>/dev/null

  3. 将参数中的脚本文件推送到长途屎务器,在长途服务器本地实施脚本 sh -x test.sh

注明:ansible试行时,加1上-vvvv展现ansible详细推行进度,也得以牢固特别原因!

参数如下:

archive # 是否采用归档模式同步,即以源文件相同属性同步到目标地址
checksum # 是否效验
compress # 开启压缩,默认为开启
copy_links # 同步的时候是否复制连接
delete # 删除源中没有而目标存在的文件(即以推送方为主)
dest= # 目标地址
dest_port # 目标接受的端口,ansible配置文件中的 ansible_ssh_port 变量优先级高于该 dest_port 变量
dirs # 以非递归的方式传输目录
existing_only # Skip creating new files on receiver.
group # Preserve group
links # Copy symlinks as symlinks.
mode # rsync同步的方式,默认都是推送push。如果你在使用拉取pull功能,可以通过mode=pull更改推送模式为拉取模式
recursive # 是否递归 yes/no
rsync_opts # 使用rsync 的参数
rsync_path # 指定远程服务器上的rsync命令所在路径信息。这个参考rsync命令的–rsync-path参数,–rsync-path=PATH
rsync_timeout # 指定 rsync 操作的 IP 超时时间,和rsync命令的 –timeout 参数效果一样.
set_remote_user # put user@ for the remote paths. If you have a custom ssh config to define the remote user for
src=‘#‘” # 同步的数据源目录或文件
–exclude=.Git #忽略同步.git结尾的文件
由于模块默认启用了archive参数,该参数默认开启了recursive,links,perms,times,owner,group和-D参数。如果你将该参数设置为no,那么你将停止很多参数,比如会导致如下目的递归失败,导致无法拉取

5.1.1 排错逻辑

  1. 本子实施中的错误

  2. 把剧本中的内容调换为ansible命令奉行

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

  1. 把ansible服务器上实施的一声令下放在被管制主机上实施

    yum install -y rsync

事例:把本机根目录下的time.sh文件同步到目的主机上。指标机器需求设置rsync软件

5.2 ansible 十分小概平常使用

# ansible web -a ‘yum install rsync -y’
# ansible web -m synchronize -a ‘src=/time.sh dest=/tmp/’

5.2.1 在被控端上 [email protected] 进程平素存在

[[email protected] ~]# ps -ef|grep sshd
root      35274      1  0 15:25 ?        00:00:00 /usr/sbin/sshd
root      37004  35274  0 16:23 ?        00:00:00 sshd: [email protected]/2 
root      37062  35274  0 16:55 ?        00:00:00 sshd: [email protected] 
root      37154  37006  0 16:55 pts/2    00:00:00 grep --color=auto sshd

11、user模块:系统用户账号管理

5.2.2 化解办法

先是,将该进程干掉

kill pid

参数如下:

comment # 用户的描述信息
createhome # 是否创建家目录
force # 在使用`state=absent’是, 行为与`userdel –force’一致.
group # 指定基本组
groups # 指定附加组,如果指定为(‘groups=’)表示删除所有组
home # 指定用户家目录
login_class # 可以设置用户的登录类 FreeBSD, OpenBSD and NetBSD系统.
move_home # 如果设置为`home=’时, 试图将用户主目录移动到指定的目录
name= # 指定用户名
non_unique # 该选项允许改变非唯一的用户ID值
password # 指定用户密码
remove # 在使用 `state=absent’时, 行为是与 `userdel –remove’一致.
shell # 指定默认shell
state #设置帐号状态,不指定为创建,指定值为absent表示删除
system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户。
uid #指定用户的uid
update_password # 更新用户密码

5.2.3 然后接纳ansible的 -vvvv 参数查看推行的错误音讯

Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc
META: ran handlers
Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
<172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
<172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
……

 

找到在哪儿出错。

事例:增多用户foo,钦命密码,设置家目录,分裂意远程登入

5.2.4 大概的荒谬

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

133 Subsystem       sftp    /usr/libexec/openssh/sftp-server
# ansible webserves -m user -a “name=foo password=<crypted passwordhere> home=/home/foo shell=/sbin/nologin”

5.3 常见难点二:  

[[email protected] ~]# ansible  -k 172.16.1.51 -m ping 
SSH password:
[WARNING]: No hosts matched, nothing to do

缘由深入分析:

在ansible的hosts文件中,未有安顿相应主机地址音信

12、group模块:系统用户组管理

5.3.1 常见难点三:       

# ansible -k 172.16.1.51 -m ping
SSH password:
172.16.1.51|FAILED! => {
"failed": true,
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}

由来剖析:

因为从没受控端的指印消息,在known_hosts文件中

第1章 ssh key完成基于密钥连接(ansible使用前提) 表明: ansible 其遵守实现基于SSH 远程连接服务 使用...

参数如下:

gid # 设置组的GID号
name= # 管理组的名称
state # 指定组状态,默认为创建,设置值为absent为删除
system # 设置值为yes,表示为创建系统组

事例:成立三个foo组,钦定gid号

# ansible webserves -m group -a “name=foo gid=360 system=yes”

13、script模块:将地点脚本复制到远程主机并运营

参数如下:

creates # 一个文件名,当这个文件存在,则该命令不执行
free_form= # 本地脚本路径
removes # 一个文件名,这个文件不存在,则该命令不执行

事例:将ansible主机上/root/local.sh复制到长途主机并实行

#ansible test -m script -a ‘/root/local.sh’

14、setup模块:收集远程主机的facts

每种被管制节点在接受并运转政管理理命令以前,会将团结主机相关音信,如操作系统版本、IP地址等报告给长途的ansbile主机

参数如下:

Fact_path:/etc/ansible/facts.d,Fact的路径
Filter:过滤串

事例:搜罗fact并且展锦州存

# ansible server -m setup –tree /tmp/facts
执行之后,会显示相关的fact,并且在/tmp/facts中会保存fact信息

事例:收罗内部存款和储蓄器音信并出口

# ansible pythonserver -m setup -a “filter=ansible_*_mb”
使用过滤字符串,从而进行了相关的匹配,得到相关的内存信息如下:
“ansible_facts”: {
“ansible_memfree_mb”: 746,
“ansible_memtotal_mb”: 996,
“ansible_swapfree_mb”: 2015,
“ansible_swaptotal_mb”: 2015
}

ansible playbook

本文由澳门新萄京官方网站发布于澳门新萄京官方网站,转载请注明出处:Plateform使用ansible创建新实例,运维工具

关键词: