Ansible--安装,命令格式, ssh, command, shell, script, copy

ansible

是一个基于python开发的自动化运维工具,可以实现批量系统配置,批量程序部署,批量运行命令

需要管控机和被管控机的时间同步一致, 配置相同的时间服务器即可

一.安装

1.安装wget

需要用到wget命令,如果系统是最小化安装的,那么可能需要先安装wget

yum install -y wget

2.将epel源安装下载到本地

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
3.安装ansible
yum install -y ansible

成功之后可查看生成的文件

rpm -ql ansible|more

# 其中
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/roles #空文件夹

二.命令格式

ansible -h # 查看命令格式

Usage: ansible <host-pattern> [options]
Options:
    -a MODULE_ARGS, #模块参数
    -C, --check # 尝试执行,但是不做任何改变
    -f FORKS, --forks=FORKS #指定并发,默认5个
    --list-hosts #列出主机
    -m MODULE_NAME# 模块名称
    --syntax-check #检查语法
    -k #密码

ping命令用到的协议是ICMP,ansible底层是用ssh来实现的

ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1.

要先配置/etc/ansible/hosts

vi /etc/ansible/hosts

## www[001:006].example.com  代表 www001-www006(包含)

1.ansible的ping

可用来探测某几台机器是否在线

ansible 192.168.226.101 -m ping #单独机器的ping
ansible 192.168.226.101,192.168.226.102 -m ping #多个机器的ping
ansible all -m ping #全部机器
ansible web -m ping #单个的组
ansible web,db -m ping #多个组的并集
ansible 'web:&db' -m ping #多个组的交集
ansible 'web:!db' -m ping #多个组的差集,在前面但是不在后面

可能会出现的问题

1.没有在/etc/ansible/hosts文件中配置被管控机的ip

2.要用命令ansible 192.168.227.146 -m ping -k见下面ssh

成功后提示:

2.ssh

1.生成ssh密钥公钥对

ssh-keygen

2.连接到目标,之后就可通过ssh来连接了

ssh-copy-id root@192.168.226.101

3.host-pattern

  • 单个的ip地址
  • 多个的ip地址,用,分割
  • 单个组
  • 多个组
    • 并集 web,db  或者 ‘web:db’
    • 交集 ‘web:&db’
    • 差集 ‘web:!db’
  • 全部 all表示

4.ansible-doc

ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
    	-j #以json的方式返回数据
     	-l, --list #列出所有的模块
     	-s, --snippet #以片段式显示模块信息
     	#直接查看完整信息

查看这些命令详细信息

ansible-doc -h

三.command

ansible web -m command -a "pwd"
ansible web -m command -a "ls"
ansible web -m command -a "chdir=/tmp pwd" #切换目录并执行命令
ansible web -m command -a "creates=/tmp pwd" #因为tmp目录存在,pwd不会执行
ansible web -m command -a "creates=/tmp2 pwd" #因为tmp2不存在,pwd执行
ansible web -m command -a "removes=/tmp2 pwd" #因为tmp2不存在pwd不执行
ansible web -m command -a "removes=/tmp pwd" #因为tmp目录存在,pwd会执行
echo "1234" |passwd --stdin tom #设置用户的密码

四.shell 支持特殊字符 <>|&$;

linux中的文件头

python文件头
#!/usr/bin/env python
# -*- coding:utf-8 -*-

shell脚本文件头
#!/bin/bash

命令:

ansible web -m shell -a "echo '1234' |passwd --stdin tom"
ansible web -m shell -a "chdir=/tmp pwd" shabang
ansible 192.168.226.101 -m shell -a "bash a.sh" #执行shell脚本
ansible 192.168.226.101 -m shell -a "/root/a.sh" # 执行shell脚本,文件要有执行的权限
ansible 192.168.226.101 -m shell -a "/root/a.py" #执行Python文件

五.script 执行本地的脚本

ansible db -m script -a "/root/a.sh" #执行本地的文件,管控机的文件
ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过
ansible db -m script -a "creates=/tmp /root/a.sh" #判断被控机上的文件

六.copy

backup #创建一个备份文件,以时间戳结尾
content #直接往文件里面写内容
dest #目标地址
group #属组
mode# 文件的权限 
owner #属主
src #源地址 直接写目录,则复制整个目录,如果目录后面以/结尾,则复制的目录下的所有文件
owner # 属主
group # 属组
mode # 权限

ansible web -m copy -a "src=/etc/fstab dest=/tmp/f" #复制本地文件到远程主机,并修改文件名,多次执行不会改变,因为checksum值是一样的
ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes" #复制本地文件,并备份
ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=tom mode=755"# 复制本地文件到远程主机,并指定属组和权限
ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=tom mode=755" #复制本地的目录到远程主机,修改目录权限,则目录里面的文件也会跟着变更
ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=tom mode=755" #复制本地目录下的所有文件,
ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语,嘈嘈切切错 杂弹,大珠小珠落玉盘' dest=/tmp/b" #直接往文件里面写内容,覆盖写,慎用
posted @ 2019-05-05 19:33  robertx  阅读(678)  评论(0编辑  收藏  举报