zoukankan      html  css  js  c++  java
  • ansible 安装

    ansible 实验
    实验环境:
    3台主机        ip 地址                 角色        主机名       cpu核心
    主机1    192.168.200.111      Ansible      ansible            1
    主机2    192.168.200.112       Client         client1            1
    主机3    192.168.200.113       Client         client2            2
    ===================================================
    环境准备
    【1】修改3个主机的主机名  ansible  client1  client2
    【2】3台主机关闭防火墙和安全机制
    【3】保证3台能够上网  nslookup www.baidu.com
    【4】主机1
    vim /etc/hosts
    192.168.200.111   ansible
    192.168.200.112    client1
    192.168.200.113    client2
    保存退出
    scp /etc/hosts 192.168.200.112:/etc/
    scp /etc/hosts 192.168.200.113:/etc/
    【5】yum 安装ansible  (强烈推荐)
    cd  /etc/yum.repos.d
    wget http://mirrors.aliyun.com/repo/Centos-7.repo
    ls
    yum clean all
    yum -y install ansible
    ansible --version    //用来测试,是否来连接成功
    【6】pip 方式安装ansible(比较麻烦,python需要安装很久)
    安装支持包
    yum -y install lrzsz vim net-tools gcc gcc-c++ ncurses ncurses-devel unzip zlib-devel zlib openssl-devel openssl
    源码编译Python3.5
    tar xf Python-3.5.2.tgz -C /usr/src/
    cd /usr/src/Python-3.5.3/
    ./configure --prefix=/usr/local/python/ && make && make install
    ln -s /usr/local/python/bin/python3 /usr/bin/python3
    which python3
    python3 -V
    使用pip3安装ansible
    /usr/local/python/bin/pip3 install ansible
    等待ansible安装完毕后,注意基于pip安装的没有配置文件,需要自己建立。
    ln -s /usr/local/python/bin/ansible/ /usr/local/bin/
    which ansible
    ansible --version  //查看版本
    【7】创建SSH免交互登录
    【ssh-keygen -t rsa  //这种方式是交互的】
    免交互方式:
    ssh-keygen -t rsa -P "" -f .ssh/id_rsa    //-P ""  指定密码为空   -f .ssh/id_rsa   指定文件存放位置  就不用回车了。
    ls .ssh/
    ------------------------------------------------------------------
    【8】client1 主机:
    环境准备:
    hostname client1
    bash
    ifconfig ens32
    iptables -F
    setenforce 0
    systemctl stop firewalld
    ------------------------------------------------------------------
    【9】client2 主机:
    环境准备:
    hostname client2
    bash
    ifconfig ens32
    iptables -F
    setenforce 0
    systemctl stop firewalld
    ---------------------------------------------------------------------
    【10】ansible主机发送公钥给client
    主机ansible操作
    ssh-copy-id root@192.168.200.112
    ssh-copy-id root@192.168.200.113
    【11】测试免密连接,主机ansible操作
    ssh root@192.168.200.112
    ssh root@192.168.200.113
    =======ansible部署完成===以下为通过ansible 对设备进行管理。
    【12】ansible配置
    在主机ansible上进行操作
    cp /etc/ansible/hosts{,.bak}
    vim  /etc/ansible/hosts   //在末行添加  设置一个组与成员
    [crushlinux]
    192.168.200.112
    192.168.200.113
    保存退出
    ansible -i  crushlinux -m ping
      //或者用这个 ansible -i /etc/ansible/hosts crushlinux -m ping
    ------环境已经结束-----
    测试:
    在ansible查看client两台主机的磁盘:
    ansible crushlinux -a "df -Th"
    --=============================
    解决为1000台主机发密钥对的问题  (如果已经为客户机配过密钥了, 可以rm -rf .ssh/authorized_keys 将密钥对删除)
    用yum安装sshpass
    在ansible主机上 :
    yum -y intall sshpass
    --------------------------------------------------
    [sshpass使用方法]
    1、直接远程连接某主机
    sshpass -p {密码} ssh {用户名}@{主机IP}
    2、远程连接指定ssh的端口
    sshpass -p {密码} ssh -p ${端口}{用户名}@{主机IP}
    3、从密码文件读取文件内容作为密码去远程连接主机
    sshpass -f ${密码文本文件} ssh {用户名}@{主机IP}
    4、从远程主机上拉取文件到本地
    sshpass -p {密码} ssh {用户名}@{主机IP}:${远程主机目录} ${本地主机目录}
    5、将主机目录文件拷贝至远程主机目录
    sshpass -p {密码} scp ${本地目录} {用户名}@{主机IP}:${远程主机目录}
    -------------------------------------------------------
    eg:
    sshpass -p 123456 ssh-copy-id root@192.168.200.112
    sshpass -p 123456 ssh-copy-id root@192.168.200.113
    //通过这个,密钥对就成功发送完毕 ,这种方式就是免交互的操作
    【rm -rf .ssh/known_hosts  //删除与其他主机建立的连接
    注意:sshpass不能解决第一次连接问题
    即 sshpass  -p 1234456 ssh root@192.168.200.112
    //会发现连接不成功】
    解决办法如下:
    6、 远程连接主机并执行命令
    sshpass -p {密码} ssh -o StrictHostKeyChecking=no {用户名}@{主机IP} 'rm -rf /tmp/test'
    //// -o StrictHostKeyChecking=no :忽略密码提示
    eg:sshpass  -p 1234456 ssh -o StrictHostKeyChecking=no  root@192.168.200.112
    还有一种方法是:
    vim /etc/ssh/ssh_config
    35   StrictHostKeyChecking no   //修改为no
    保存退出
    //就可以不用在连接时需要yes了
    还有一种方法,可以不用发密钥对
    vim /etc/ansible/hosts
    在最末行添加 
    [nokey]
    clent2 ansible_ssh_host=192.168.200.113 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
    clent1 ansible_ssh_host=192.168.200.112 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
    保存与退出
    ansible nokey -m ping   //看是否能通,通了就返回pong
    ==========================================
    注意:【1】ansible 如果使用默认的Inventory 文件也即{/etc/ansible/hosts}文件,也可以不用指定
    ansible  crushlinux -m ping
      要是默认文件位置不是这个地方,需要用(-i 文件路径)指定文件位置 ansible -i /etc/ansible/hosts crushlinux -m ping
    【2】定义组成员方式
    vim /etc/ansible/hosts
    [client]
    client1
    client2
    [test01]
    client[1:2]   //这些方式都可以
    保存退出
    ansible client -m ping
    ansible test01 -m ping
    ==============================================
    ansible 语法
    1、ansible client -m ping   //client 表示组  -m表示指定模块
    2、ansible client -m command  -a "free -m"//  command模块表示提供相应的shell命令   -a 给模块传递参数即执行什么命令 command 是默认的,可以省略即ansible client -m   -a "free -m"
    3、ansible client -m  -a "free -m" --limit 192.168.200.112 // --limit 表示限定哪个主机执行
    4、直接对IP进行执行
    ansible 192.168.200.112 -a "free -m"    //一个固定的 IP
    或者 ansible 192.168.200.* -a "free -m" //表示一个网段
    ==============================================
    ansible命令
    输入ansible   在按两次tab键  就会看到好多
    ==============================================
    Ansible是生产环境中使用非常频繁的命令之一,主要在以下场景应用
    非固化需求
    临时一次性操作
    二次开发接口调用
    格式:
    ansible   <host-pattern>  [options]
    参数:
    -v :输出详细的执行过程信息,可以得到执行过程所有信息
    -i  PATH :指定inventory信息,默认为/etc/ansible/hosts
    -f  NUM :并发线程数,默认为5个线程
    -p  rivate-key=PRIVATE_KEY_FILE 指定秘钮文件
    -m  NAME :指定执行时使用的模块
    -M  DIRECTORY :指定模块存放路径,默认为/usr/share/ansible
    -a   ARGUMENTS :指定模块参数
    -u   USERNAME :指定远程主机USERNAME运行命令
    -I subset  :限定运行主机
    --list-hosts  :列出符合条件的主机列表,不执行任何命令。
    2、ansible-playbook
    类似于Linux系统中的sh或 source命令,用来执行系列任务。
    工作机制:通过读取编写好的playbook 文件实现集中处理任务,ansible-playbook命令后跟yml格式的playbook文件,playbook文件存放了要执行的任务代码
    语法:ansible-playbook playbook.yml
    playbookyml 需要之前编译好建议写playbook.yml文件的绝对路径
    3、ansible-console
    ansible-console 是ansible.为用户提供的一款交互式工具
    在终端输入ansible-console命令后显示
    三、ansible模块
    1、command模块
    shdir:在远程主机上运行命令前要提前进入的目录
    creates:在命令运行时创建一个文件,如果文件已经存在,则不会创建任务
    removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务
    executeble:指明运行命令的shell 程序
    2、shell模块
    Shell 模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令,和command模块的区别是它支持shell特性,如管道,重定向等。
    3、raw模块
    最原始的方式运行命令(不依赖python,仅通过ssh实现)
    4、copy模块
    destf指出复制文件的目标目录位置,使用绝对路径。如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有内容
    src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
    mode:指出复制时,目标文件的权限可选
    owner:指出复制时,目标文件的属主可选
    group:指出复制时,目标文件的属组可选
    content:指出复制到目标主机上的内容,不能与src.一起使用,相当于复制content指明的数据到目标文件中
    5、hostname模块
    name:主机名
    6、yum模块
    name:程序包的名称,可以带上版本号,如不指定版本号默认安装为最新版本
    state=present | latest | absent:指明对程序包执行的操作,pressent 表示安装程序包,latest表示安装最新版本的程序包,absent 表示卸载程序包。
    disablerepo:在用yum安装时禁用某个仓库的ID
    enablerepo:在用yum 安装时启用某个参考的ID
    conf file:yum运行时的配置文件而不是使用默认的配置文件
    diable gpg check-yeslno:是否启用完整性校验功能
    7、service模块
    name:被管理的服务名称
    state=started | stopped | restarted:动作包含启动关闭或重启
    enabled=yes | no:表示是否设置该服务开机自启动
    runlevel:如果设定了enabled开机自启动,则要定义在哪些运行目标下自启动
    8、user模块
    name:必选参数账号名称
    state=present | absent:创建账号或者删除账号,present 表示创建,absent 表示删除。
    system=yes | no:是否为系统账号
    uid:用户UID
    group:用户的基本组
    groups:用户的附加组
    shell:默认使用的shell
    home:用户的家目录。
    move home=yes | no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动。
    password:用户的密码,建议使用加密后的字符串
    comment:用户的注释信息
    remove=yes | no:当 state=absent时,是否删除用户的家目录
    9、script
    script 模块能够实现远程服务器批量运行本地的shell脚本。
     
  • 相关阅读:
    POJ--1797 Heavy Transportation (最短路)
    Luogu--3381 【模板】最小费用最大流
    51Nod--1295 XOR key (可持久化tire树)
    HDU--5269 ZYB loves Xor I (字典树)
    [Windows Server 2008] ASP.net安装方法
    [Windows Server 2008] 安装IIS7.5及FTP
    [Windows Server 2012] Tomcat安装方法
    [Windows Server 2012] Filezilla安装方法
    [Windows Server 2012] 安装护卫神·主机管理系统
    [Windows Server 2012] 安装SQL Server 2012
  • 原文地址:https://www.cnblogs.com/elin989898/p/11985965.html
Copyright © 2011-2022 走看看