一、ansible基础使用

1、常用的自动化运维工具对比

1、Puppet

基于ruby语言开发,CS架构,扩展性强,比如集群,客户端和服务器通信用ssl协议

 

2、Slatstack

基于python开发,也是采用cs架构,比puppet更轻量级,脚本配置更为简单

 

3、Ansible

基于python开发,支持分布式,无需客户端,更轻量级,配置语言采用yaml,更简单,但是比较新

选择ansible的理由

相对于puppet和saltstack,ansible不需要客户端,更轻量级

ansible不需要提供启动服务,仅仅只是一个工具,实现分布式扩展

更强的远程命令执行操作

不输于pupprt和satstack的其他功能

2、ansible的工具架构

 一、ansible基础使用_第1张图片

 

连接插件:connection plugins 通过连接插件管理客户端

核心模块:core midules,依赖于具体的模块去做具体的事情

自定义模块:custom modules,当核心模块满足不了的时候,需要自定义模块

配置文件:playbooks用于定义配置文件,定义一大堆任务下发到客户端去自动执行

主机清单:Host inventory,定义管理的主机就在这个host inventory

 

3、ansible工作原理

 一、ansible基础使用_第2张图片

 

三种远程方式:

Local(无聊方式)

Ssh(主流的方法)

0mq(被管理端需要安装客户端)

利用modules在playbooks定义一堆命令,然后应用到hosts inventory主机清单中,通过ssh的方式对

客户端下发命令管理

 

4、安装

yum -y install epel*   --------先装代理

yum -y install ansible

 

5、ansible目录结构介绍

/etc/ansible 配置文件目录

/etc/ansible/ansible.cfg主配置文件

/etc/ansible/hosts 定义的主机清单

/usr/bin/ansible

 

-u 指定用户,不指定默认是root

-m 指定模块  如果不指定模块默认就是command模块

-a 指定命令

-k 用来提示输入远程主机密码

[test]              ------对不同的主机进行分组

192.168.16.141        -----指定这个主机

192.168.16.139

Web1        ---------------可以填域名、必须可解析

[nginx]  对不同的主机进行分组

 

案例一:定义两个组,对组内成员进行命令操作

 

[test]

192.168.16.141

192.168.16.139

 

Web1

[nginx]

 

改配置文件,注释去掉

/etc/ansible/ansible.cfg

host_key_checking = False

 

[root@localhost ansible]# ansible -i /etc/ansible/hosts test -u root -m command -a 'ls /home' -k

SSH password:

192.168.16.141 | SUCCESS | rc=0 >>

han

192.168.16.139 | SUCCESS | rc=0 >>

admin

han

 

 

案例二、

[root@localhost ansible]# ansible -i /etc/ansible/hosts test -u root -m command -a 'ls /home' -k

默认情况下hosts  root 模块也是command所以可以省略写为

 

[root@localhost ~]#  ansible test  -a 'ls /home' -k

SSH password:

192.168.16.139 | SUCCESS | rc=0 >>

admin

han

192.168.16.141 | SUCCESS | rc=0 >>

han

[root@localhost ~]#

 

 

案例三:管理很多连续的主机

[test]

192.168.16.141

192.168.16.139

192.168.16.[50:100]-----从16.50到100

Web1

 

案例三:做好互信任

那么多主机就不用再加key参数指定密码了

互信步骤:

1、ssh 文件开启rsa认证

以root用户登录,更改SSH的配置文件 /etc/ssh/sshd_config 

RSAAuthentication yes # 启用 RSA 认证

 PubkeyAuthentication yes # 启用公钥私钥配对认证方式

 AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径

重启SSH服务: service sshd restart 

2、以无密码访问的用户执行如下命令建立公钥和私钥,提示输入时直接回车。

[root@localhost asg]# ssh-keygen -t rsa

Generating public/private rsa key pair.

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

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

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:

72:bb:4f:1d:ef:57:d0:7f:5a:40:f2:63:cc:77:6c:86 [email protected]

默认公钥文件/root/.ssh/id_rsa.pub

默认私钥文件/root/.ssh/id_rsa

.ssh文件夹如果不存在,需要手动创建,并将权限改为700

 3、如果要和其他机器建立互信、让其他机器无密码访问本机,需要将其他机器的公钥拷贝到本机,并追加到文件/root/.ssh/authorized_keys,然后修改该文件权限为600.

scp  192.168.50.147:/root/.ssh/id_rsa.pub  /root/.ssh/147.pub

cat  /root/.ssh/147.pub >>/root/.ssh/authorized_keys

(147以root用户建立的公钥和私钥,本机就可以以root用户无密码ssh访问147)

4、SSH无密码验证的原理:

Master作为客户端,要实现无密码公钥认证,连接到服务器Salve上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Salve上。当Master通过SSH链接到Salve上时,Salve会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Salve,Salve确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,期间不需要手工输入密码,重要的过程是将Master上产生的公钥复制到Salve上。

 

案例四:ping所有模块所有主机

[root@localhost ~]# ansible all -m ping -k

SSH password:

192.168.16.139 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

192.168.16.141 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

[root@localhost ~]#

 

案例五:非标准端口,文件里指定用户

 一、ansible基础使用_第3张图片

 

 

 

案例六:嵌套组mfs:children组中嵌套很多组

[mfs:children]

mfs_nginx

mfs_apache

mfs_tomcat

 

[mfs_nginx]

192.168.16.139

 

[mfs_apache]

192.168.16.141

[mfs_tomcat]

 

[root@localhost ~]#  ansible mfs -m ping

192.168.16.139 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

192.168.16.141 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

[root@localhost ~]#  ansible mfs_apache -m ping

192.168.16.141 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

 

转载于:https://www.cnblogs.com/hanjingzheng/p/9082389.html

你可能感兴趣的:(一、ansible基础使用)