zoukankan      html  css  js  c++  java
  • 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" #直接往文件里面写内容,覆盖写,慎用
    
  • 相关阅读:
    3年A班,从现在起大家都是人质-观后感
    深入浅出的Object.defineProperty()
    在Vue中使用插槽(solt)
    非父子组件间的传值
    给组件绑定原生事件
    组件参数校验与非props特性
    Vue父子组件的数据传递
    Vue组件使用中的细节点
    vue中set基本用法
    vue中的列表渲染
  • 原文地址:https://www.cnblogs.com/robertx/p/10815734.html
Copyright © 2011-2022 走看看