ansible的安装和使用

  • 介绍:

    ansible是一个自动化运维工具,通过SSH协议管理服务器,基于模块来完成自动化任务,ansible完成批量性任务,自动部署各种服务和环境.

  • 安装

    使用python3的pip工具安装:pip3 install ansible

  • 开始使用:

    • 管理的前提条件:

    管控机可通过ssh连接受控机. 建议设置密钥认证.明文密码不安全.

    管控端用户和受控端用户都是普通用户.

    生成ssh密钥的命令: ssh-keygen -t rsa

    私钥和公钥生成后默认在~/.ssh目录下,ansible管控端的公钥需要放在受控端的.ssh/authorized_keys文件中.

  • 执行命令:

    ssh-copy-id -i ~/.ssh/id_rsa.pub  yuan@192.168.1.1 -p200  
    这条命令会将公钥存放到authorized_keys文件中。
    -i 选项指定要传输的公钥文件
    指定用户和IP,端口等信息。
  • ssh代理: ssh-agent

    ssh-agent 可管理私钥。

    使用不同密钥连接不同主机,ssh-agent可自动选择对应的密钥进行认证。

    密钥设置密码时,也需要使用ssh-agent来管理。

    启动ssh代理并添加密钥:
    ssh-agent bash  执行后会在当前shell中启动一个默认shell. ssh-agent在子shell中执行。
    eval ssh-agent 进入新创建的子shell,会启动一个ssh-agent进程。
    ssh-agent -k   关闭ssh-agent代理。
  • ssh-agent管理密钥:

    将私钥添加到ssh代理:
        ssh-add ~/.ssh/id_rsa_custom
    查看ssh代理中已经添加了那些私钥:
        ssh-add -l
    列出代理中所有私钥对应的公钥内容:
        ssh-add -L
    从代理中移除某个已经添加的私钥:
        ssh-add -d 要移除的私钥名称
    清空代理中的所有私钥:
        ssh-add -D
    临时锁定ssh代理:
        ssh-add -x
    解锁ssh代理:
        ssh-add -X   
  • 配置主机清单(Inventory):

    ansible的配置清单为: /etc/ansible/hosts
    sudo mkdir /etc/ansible/
    sudo vim /etc/ansible/hosts
    [test]   组名称
    192.168.1.1 ansible_port=200
  • 测试

    ansible test -m ping

  • 生成密钥指定输出文件名称的方式:

    在管控端执行:
    $ssh-keygen -t rsa -f id_rsa-test
    ssh-copy-id -i ~/.ssh/id_rsa-test.pub  yuan@192.168.1.1 -p200
    ssh -p200 yuan@192.168.1.1
    yuan@192.168.1.1's password: 
    仍提示输入密码,说明没有找到对应的私钥。
    
    ssh-agent bash
    eval ssh-agent
    ssh-add ~/.ssh/id_rsa-test
    再次ssh -p2020 yuan@192.168.1.1 登录,已经免密钥登录成功。
  • 配置清单详解

    • 分组功能:
      将同一类型的应用主机分为一组,通过组名管理组内的所有主机。
    例如:
        [web]
        192.168.1.3
        [db]
        192.168.1.5
    支持在组内嵌套组:
    
    例如:
        [webA]
        192.168.1.3
        [webB]
        192.168.1.4
        [web:children]   //表示当前组中存在子组。
        webA
        webB
    
    建议采用在组内嵌套组的方法,这样看起来逻辑更清晰。
    • 支持INI配置
    例如: 
    [web]
    192.168.1.3
    [db]
    192.168.1.5      
    支持YAML语法
    
    YAML语法:
    第一行组名
    第二行使用一个空格作为缩进。使用hosts关键字。
    第三行开头使用两个空格作为缩进。
    第四行开头使用两个空格作为缩进。
    例如:
    test:
    hosts:
      192.168.1.1
      test1:
        ansible_host: 192.168.1.5
        ansible_port: 150
      192.168.1.6:
    
    在组中嵌套组的YAML写法:
    all:
    children:
      web:
        children:
          webA:
            hosts:
              192.168.1.3:
          webB:
            hosts:
              192.168.1.4:
    
    上述配置说明: web组有两个子组,分别为webA组和webB组,而这两个组分别有自己组内的主机。
    建议采用YAML语法。