zoukankan      html  css  js  c++  java
  • Ansible概述、安装、命令基础、批量部署SSH密钥登录

    ansible概述

    Ansible是2013年推出的一款IT自动化和DevOps软件,目前由Redhat已签署Ansible收购协议。其是基于Python研发,糅合了很多老运维工具的优点。实现了批量操作系统配置,批量程序的部署,批量运行命令等功能。

    为什么要选择ansible?

    • ansible优点

        是仅需要ssh和Python即可使用

        无客户端

    • ansible功能强大,模块丰富

    • 上手容易门槛低

    • 基于 python 开发,做二次开发更容易

    • 使用公司比较多,社区活跃

    ansible安装

    环境准备:

    virsh制作6台虚拟机(2G内存、2CPU、20G硬盘、root密码为123456)

    • 1台管理机ansible(192.168.4.10)
    • 另外5台虚拟机:
    1.  web1 (192.168.4.11) 
    2.  web2 (192.168.4.12)
    3.  db3    (192.168.4.13)
    4.  db4    (192.168.4.14)
    5.  cache5 (192.168.4.15)

    [root@ansible ~]# cat /etc/yum.repos.d/local.repo    //自定义ansible的安装yum源

    [public]

    name=public

    baseurl=ftp://192.168.4.254/public        //真实机ftp有ansible的rpm包及依赖包

    enabled=1

    gpgcheck=0

    [centos7]

    name=centos7

    baseurl=ftp://192.168.4.254/centos7

    enabled=1

    gpgcheck=0

    [root@ansible ~]# vim /etc/hosts      //设置6台机器IP与主机名对应关系

    [root@ansible ~]# yum -y install ansible      //使用yum安装ansible(安装方式有源码编译、yum、pip等)

    [root@ansible ~]# ansible --version      //查看ansible版本

    主机定义与分组

    [root@ansible ~]# cd /etc/ansible/

    [root@ansible ansible]# vim ansible.cfg       //修改ansible配置文件

    inventory = /etc/ansible/hosts     //取消注释

    [root@ansible ansible]# vim hosts          //设置需要管理的主机的分组

    [web]

    web1

    web2

    [db]

    db3

    db4

    [cache]

    cache5

    [root@ansible ansible]# ansible web,db --list-hosts       //列出分组中的主机

    hosts (4):

    web1

    web2

    db3

    db4

    [root@ansible ansible]# ansible all --list-hosts           //列出所有主机

    hosts (5):

    web1

    web2

    cache5

    db3

    db4

    ssh交互式密码登录远程主机

    [root@ansible ansible]# vim ansible.cfg

    :61

    host_key_checking = False     //取消注释

    [root@ansible ansible]# ansible web -m ping -k      //交互式登录

    SSH password:             //输入密码123456

    web2 | SUCCESS => {

    "changed": false,

    "ping": "pong"

    }

    web1 | SUCCESS => {

    "changed": false,

    "ping": "pong"

    }

    ssh非交互式登录远程主机

    (先修改了db3、db4的root密码分别为a、b)

    [root@ansible ansible]# vim hosts

    [db]

    db3 ansible_ssh_pass="a"

    db4 ansible_ssh_pass="b"

    [root@ansible ansible]# ansible db -m ping      //非交互式登录

    db4 | SUCCESS => {

    "changed": false,

    "ping": "pong"

    }

    db3 | SUCCESS => {

    "changed": false,

    "ping": "pong"

    }

    注:ansible建立的是长连接。即客户端和服务端只用一个Socket对象,长期保持Socket的连接。socket文件在/root/.ansible/cp/

    [root@ansible ansible]# ls /root/.ansible/cp/

    6b13a69203

    设置参数、子组

    [root@ansible ansible]# vim hosts

    [web]

    web[1:2]

    [web:vars]      //参数

    ansible_ssh_pass="123456"

    [db]

    db3

    db4

    [app:children]   //子组

    web

    db

    [cache]

    cache5

    ansible命令基础

    命令格式:

    ansible 主机或分组 -m 模块名 -a 模块的参数

      -M 指定模块路径

      -m 使用模块,默认 command 模块

      -a or --args 模块参数

      -i inventory 文件路径,或可执行脚本

      -k 使用交互式登录密码

      -e 定义变量

      -v 详细信息,-vvvv 开启 debug 模式

    例如:

    [root@ansible ~]# ansible web -m command -a 'uptime'

    web2 | SUCCESS | rc=0 >>

    09:00:52 up 12 min, 1 user, load average: 0.14, 0.15, 0.18

    web1 | SUCCESS | rc=0 >>

    09:00:52 up 12 min, 1 user, load average: 0.00, 0.13, 0.19

    批量部署SSH密钥登录

    原因:

    • 交互输入密码较麻烦

    • 密码写入配置文件安全性很差

    • 不同远程主机如果密码不同,配置文件将很复杂

    步骤:

    给所有主机部署公钥:

    [root@ansible ~]# vim  /etc/ansible/hosts    //先删除之前实验设置的密码

    [root@ansible ~]# cd /root/.ssh/

    [root@ansible .ssh]# ssh-keygen -t rsa -b 2048 -N ' ' //生成一对密钥。-t type 指定密钥算法,-b bits 指定密钥长度,对于RSA密钥,最小要求768位,默认是2048位。 -N new_passphrase 提供一个新的密语。

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):

    Your identification has been saved in /root/.ssh/id_rsa.

    Your public key has been saved in /root/.ssh/id_rsa.pub.

    The key fingerprint is:

    SHA256:frfCsFFWF9bjKOrFpyGncn/8NBJTzbwqr1xEPb6BKPg root@ansible

    The key's randomart image is:

    +---[RSA 2048]----+

    | oo    |

    | ..o+o|

    | . oo+=|

    | . o.o.+.o|

    | .S+o..= + |

    | .+o.=..+o|

    | oE*.*+ +|

    | ..=+o++o.|

    | o .=+... |

    +----[SHA256]-----+

    [root@ansible .ssh]# ls

    authorized_keys   id_rsa   id_rsa.pub   known_hosts

    [root@ansible .ssh]# ansible  all  -m  authorized_key -a  "user=root  exclusive=true  manage_dir=true key='$(</root/.ssh/id_rsa.pub)'"  -k    //批量给所有主机部署SSH密钥

    SSH password:        //输入root密码(所有主机密码一样)

    ......

     

    若报错

    "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."

    解决方法:

    修改ansible.cfg

    host_key_checking = False

  • 相关阅读:
    滚~滚~滚动条(移动端 )
    JS数据模板分离(告别字符串拼接)-template
    五子棋大战(人机)
    数据结构——队列
    数据结构——栈
    mysql下的SELECT INTO语句
    海明校验码
    android 调出显示标题栏(title bar)
    Windows failed to start.界面下修复win8引导
    android 修改背景色(转)
  • 原文地址:https://www.cnblogs.com/iouwenbo/p/10236564.html
Copyright © 2011-2022 走看看