1.ansible的安装方式

1.1使用yum源安装

yum install ansible -y 

1.2使用rpm包安装

https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2.主机认证

2.1主机分配

  采用2台主机做测试环境

主控制端 192.168.152.129
被控制端 192.168.152.130

2.2单向主机认证

ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q
ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.152.130

2.3使用expect  

expect工具实现非交互式的ssh-copy-id,避免每次都询问登陆主机的用户和密码

同时也可以使用,ansible自带的批量添加秘钥模块,批量的分发到控制端节点,authorized_key模块即可完成,详见介绍常用的ansible的模块。

# 安装expect
[root@server1 ~]# yum -y install expect # expect脚本
[root@server1 ~]# cat auto_sshcopyid.expect
#!/usr/bin/expect set timeout 10
set user_hostname [lindex $argv 0]
set password [lindex $argv 1] spawn ssh-copy-id $user_hostname
expect {
"(yes/no)?"
{
send "yes\n"
expect "*password: " { send "$password\n" }
}
"*password: " { send "$password\n" }
} expect eof # 批量调用expect的shell脚本
[root@server1 ~]# cat sshkey.sh
#!/bin/bash ip=`echo -n "$(seq -s "," 131 134),150" | xargs -d "," -i echo 192.168.152.{}`
password="123456"
#user_host=`awk '{print $3}' /root/.ssh/id_rsa.pub` for i in $ip;do
/root/auto_sshcopyid.expect root@$i $password &>>/tmp/a.log
ssh root@$i "echo $i sure "
done # 执行shell脚本配置互信
[root@server1 ~]# chmod +x /root/{sshkey.sh,auto_sshcopyid.expect}
[root@server1 ~]# ./sshkey.sh

  

3.主要配置文件

/etc/ansible/ansible.cfg       #主配置文件,配置ansible工作特性
/etc/ansible/hosts #主机清单文件
/etc/ansible/rules #角色目录 /etc/ansible/ansible.cfg 配置文件简单介绍:
[defaults]
# some basic default values...
#inventory = /etc/ansible/hosts #host的主机清单
#library = /usr/share/my_modules/ #模块目录
#module_utils = /usr/share/my_module_utils/ #模块目录
#remote_tmp = ~/.ansible/tmp # tmp远端临时存放的目录 ,命令执行完目录下生成的脚本删除
#local_tmp = ~/.ansible/tmp #主控端执行命令的时候,把命令脚本存放,发送到被控制端的零时存放,执行完删除
#forks = 5 #指定进程为5
#poll_interval = 15 #拉取数据间隔时间
#sudo_user = root #主控端执行命令的时候非root身份,需要切换以什么用户身份执行命令
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22 #默认端口号
#module_lang = C
#module_set_locale = False
####
#host_key_checking = False #检查对应服务器的host_key ,建议取消注释(不检查第一次连接主机的时候 输入yes)
#log_path=/var/log/ansible.log #日志文件存放路径
#roles_path = /etc/ansible/roles:/usr/share/ansible/roles #roles相关 程序文件:
/usr/bin/ansible #主程序,临时命令执行工具
/usr/bin/ansible-doc #查看配置文档,模块功能查看工具
  -a   #列出所有模块的文档
  -l,--list   #列出可以用的模块
  -s,--snippet   #显示指定模块的playbook片段(显示简单的使用方法)
/usr/bin/ansible-galaxy #下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook #定制自动化任务,编排剧本工具/usr/bin/ansible-pull 远程执行命令的工具:
/usr/bin/ansible-vault #文件加密工具
/usr/bin/ansible-console #基于Console界面与用户交互的执行工具

4.ansible的语法结构

功能:通过ssh实现配置管理、应用部署、任务执行等功能

语法:
ansible <host-pattern> [options]
ansible <host-pattern> [-m module_name] [-a args]
ansible 主机清单 -m 模块 -a 模块参数(命令) [-o单行显示]
常用选项:
-m :模块
-a :模块选项
-o :结果单行显示
-u :主机的用户名
-k :密码询问方式
-i :自定义主机清单文件
–version 显示版本ansible的版本号
-v 详细过程 –vv -vvv更详细
–list-hosts 显示主机列表,可简写--list
-k, –ask-pass 没有做密码密钥认证的时候,需要加,提示连接密码,默认Key验证
-K, –ask-become-pass 远端执行命令的时候是以谁的用户身份执行,要输入谁的密码
-C, –check 检查,并不执行
-T, –timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, –user=REMOTE_USER 远端执行命令的时候是以谁的用户身份执行,
-b, –become 代替旧版的sudo 切换 root时候或者其他用户的时候使用    -B, 异步运行,并在多少秒后,超时就停止运行 例如 -B 200 ;默认是同步,保持长连接,等待让所有任务完成返回结果。
-P, 异步运行间隔时间 默认15秒
-t, 执行及结果输出到目录,目录名为host的主机名作为目录名,也可做重定向使用
  
   --syntax-check, 检查playbook的语法,不执行语句内容

  

4.1特殊的表达式

支持正则表达式:

 *  支持通配符
示例:
ansible “*” -m ping
ansible 192.168.152.* -m ping
ansible “*srvs” -m ping 与:交集关系
示例:
ansible “web:&db” -m ping 或:
示例:
ansible “websrvs:dbsrvs” -m ping
ansible “192.168.152.130:192.168.152.131” -m ping 非:
ansible ‘websrvs:!dbsrvs’ -m ping 在websrvs组,但不在dbsrvs组中的主机 正则表达式:
ansible “~(web|db).*\.liych\.com” -m ping

5.Inventory主机配置清单格式

  用于定义ansible要管理的主机列表,可以定义单个主机和主机组,通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关,主机配置文件在/etc/ansible/hosts就是默认的inventory。

  使用是需要定义主机清单,inventory常用的定义规则如下:

cat -n /etc/ansible/hosts

1)定义主机组方式
[webservers] #一个组名
192.168.152.131 #组内主机
192.168.152.132 2)批量定义主机
[webservers]
192.168.152.[131:134] #【可以指定范围】 一般为顺序可连代表着.131,132,133,134 3)域名批量定制
[websrvs]
www[01:100].example.com #同上
[dbsrvs]
db-[a:f].example.com #同上 4)内置参数:用户名和密码,ssh端口;命令行不用输入-u和-k选项 在主机清单内设置密码可见
[webservers]
192.168.152.[131:132] ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22'
ansible_ssh_user #当前主机的用户
ansible_ssh_pass #当前主机的密码 5)vars变量 :定义主机的内置参数
webservers]
192.168.152.[131:132]
[webservers:vars] #可以设置一组,生效于多个主机
ansible_ssh_user='root'
ansible_ssh_pass='123456'
ansible_ssh_port='22' 6)子组分类变量:children
[nginx]
192.168.152.131
[apache]
192.168.152.132
[webservers:children]
apache
nginx
[webservers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123456'
ansible_ssh_port='22' #以上表示定义2个组,然后把2个小组加到一个大组内(webservers) ,同时为大组内的小组建立通用的通信账户信息。

  

简单命令执行,验证是可以通信使用的。

ping测试使用:

创建目录文件:

6.命令的执行过程:

1. 首先读主配置文件并加载 默认/etc/ansible/ansible.cfg

2.获取主机列表加载自己对应的模块文件,如command等

3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件

4.给该文件传输至远程服务器文件+x执行权限

5.主控制端执行并返回结果,输出到屏幕

6.删除临时远端的py临时文件,sleep 0退出

6.1返回结果颜色说明:

绿色:执行成功

黄色:执行成功并且对目标主机做过修改,例如创建文件后,在同目录下创建目录的话,返回黄色,如上图。

红色:执行失败

紫色:提示警告

下篇文章预告:介绍常用的ansible的模块。

Ansible安装部署和常用命令,及其主机清单inventory(二)的更多相关文章

  1. Ansible安装部署以及常用模块详解

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  2. Ansible安装部署及常用模块详解

    Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...

  3. ansible环境部署及常用模块总结 - 运维笔记

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  4. Ansible安装部署

    Ansible安装部署 Ansible是一种集成IT系统的配置管理, 应用部署, 执行特定任务的开源平台. 它基于Python语言实现, 部署只需在主控端部署Ansible环境, 被控端无需安装代理工 ...

  5. 第1天:Ansible安装部署

    Ansible介绍 Ansible是一个简单的自动化引擎,可完成配置管理.应用部署.服务编排以及各种IT需求.它是一款使用Python语言开发实现的开源软件,其依赖Jinjia2.paramiko和P ...

  6. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  7. linux下安装nginx以及常用命令指南

    安装nginx之前,要先在服务器上安装nginx运行所需要的依赖包 目录选择:一般选择 "/usr/local/" 1.安装PCRE库 离线安装包:https://pan.baid ...

  8. (Linux环境Kafka集群安装配置及常用命令

    Linux环境Kafka集群安装配置及常用命令 Kafka 消息队列内部实现原理 Kafka架构 一.下载Kafka安装包 二.Kafka安装包的解压 三.设置环境变量 四.配置kafka文件 4.1 ...

  9. Ansible主机清单Inventory文件hosts

    Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638 | 字数统计 1,442 | 阅读时长预计 ...

随机推荐

  1. pyqt5的QListWidget中设置右键菜单

    QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的, 从文档上可以找到 QWidget 上有以下两个与右键菜单有关的函数: Qt.ContextMenu ...

  2. springboot中静态属性/静态方法从YAML(yml)读取配置属性

    启动类添加注解@EnableConfigurationProperties import jnetman.session.SnmpPref; import org.springframework.bo ...

  3. 惊讶!我定的日志规范被CTO在全公司推广了

    打印日志是一门艺术,但长期被开发同学所忽视.日志就像车辆保险,没人愿意为保险付钱,但是一旦出了问题都又想有保险可用.我们打印日志的时候都很随意,可是用的时候会吐槽各种 SB 包括自己!写好每一条日志吧 ...

  4. Vuex的认识和简单应用(一)

    一.vuex是一个专为vue.js应用程序开发的状态管理模式. 应用场景:1.多个视图依赖于同一个状态2.来自不同视图的行为需要变更同一个状态此时,我们可以把组件的共享状态抽取出来,以一个全局单例模式 ...

  5. Samba的认识

    Samba服务 samba是一个网络服务器,用于Linux和Windows之间共享文件. samba端口号 samba (启动时会预设多个端口) 数据传输的TCP端口 139.445 进行NetBIO ...

  6. VMware Workstation 15 Pro简化安装Kali Linux 2019.2

    记录下简单安装的步骤

  7. 关于虚拟机docker 启动mysql 启动成功但未挂载到端口

    首先排查了防火墙和其他权限相关问题 然后检查了mysql 用户权限问题 docker logs 查看日志 正常应该是到3306 问题是我的mysql my.cnf 文件是挂在在本地.当第二次启动容器时 ...

  8. 蒲公英v5p%n搭建局域网后用nginx做代理的配置

    1.nginx.conf worker_processes auto; error_log /usr/local/var/log/nginx/error.log; events { worker_co ...

  9. 关于js查找和筛选和循环的几种方式

    find(); find() 方法返回通过测试(函数内判断)的数组的第一个元素的值. find() 方法为数组中的每个元素都调用一次函数执行: 当数组中的元素在测试条件时返回 true 时, find ...

  10. 【转帖】msvcp100.dll和msvcr100.dll

    VS发布软件时去除msvcp100.dll和msvcr100.dll图解说明 https://blog.csdn.net/yu__jia/article/details/82753262 msvcp. ...