Ansible通过SSH对设备进行管理,而SSH包含两种认证方式:一种是通过密码认证,另一种是通过密钥对验证。前者必须和系统交互,而后者是免交互登录。如果希望通过Ansible自动管理设备,应该配置为免交互登录被管理设备。如果对SSH免交互式登录不太了解的朋友可以参考博文:CentOS 7.4中的远程访问控制里面有详细的介绍,这里就不详细介绍了!
[root@centos01 ~]# ssh-keygen -t rsa <!--生成密钥对--> Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):<!--密钥对存放路径--> Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): <!--输入私钥保护密码,直接按Enter键表示无密码--> 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: SHA256:cJz6NRTrvMDxX+Jpce6LRnWI3vVEl/zvARL7D10q9WY root@centos01 The key's randomart image is: +---[RSA 2048]----+ | . . .| | . . + oo| | . = o o. oo| | = * o..+ *| | . S *.=+=*+| | . o =+XooE| | . ..=.++.| | ..o ..| | .. o. | +----[SHA256]-----+ [root@centos01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.20 <!--复制公钥到远端192.168.100.20--> [root@centos01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.30 <!--复制公钥到远端192.168.100.30-->至此,已经完成Ansible的部署,接下来就可以通过Ansible对设备进行管理了。
2、Ansible配置Inventory是Ansible管理主机信息的配置文件,相当于系统Hosts文件的功能,默认存放在/etc/ansible/hosts。在hosts文件中,通过分组来组织设备,Ansible通过Inventory来定义主机和分组,通过在ansible命令中使用选项-i或--inventory-file来指定Inventory。
[root@centos01 ~]# ansible -i /etc/ansible/hosts web -m ping如果使用默认的Inventory文件(/etc/ansible/hosts),也可以不指定Inventory文件,例如:
[root@centos01 ~]# ansible web -m pingAnsible通过设备列表以分组的方式添加到/etc/ansible/hosts文件来实现对设备的管理,所以在正式管理之前,首先要编写好hosts文件。hosts文件中,以[ ]包含的部分代表组名,设备列表支持主机名和IP地址。默认情况下,通过访问22端口(SSH)来管理设备。若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口标明,以行为单位分隔配置。另外,hosts文件还支持通配符。
[root@centos01 ~]# vim /etc/ansible/hosts ............ <!--此处省略部分内容--> [web] 192.168.100.20 192.168.100.30 [test] :222 <!--通过222端口管理设备--> [mail] yj1.kgc.cn yj[2:5].kgc.cn <!--[2:5]表示2~5之间的所有数字,即表示yj2.kgc.cn、yj3.kgc.cn……的所有主机-->可以将一个主机同时归置在不同的组中。
配置完成之后,可以针对hosts定义的组进行远程操作,也可以针对组中的某一个或多个主机操作。例如:
1)只对web组中192.168.1.2主机操作,通过--limit参数限定主机的变更。 [root@centos01 ~]# ansible web -m command -a "systemctl status httpd" --limit "192.168.100.20" 192.168.100.20 | SUCCESS | rc=0 >> <!--看到SUCCESS就知道成功了,所以以下内容--> <!--如果测试httpd服务,被测试主机必然已经安装并启动了httpd服务--> 2)只对192.168.100.20主机操作。通过IP限定主机的变更。 [root@centos01 ~]# ansible 192.168.100.20 -m command -a "systemctl status httpd" 192.168.100.20 | SUCCESS | rc=0 >> 3)只对192.168.100.0网段主机操作,这就需要使用到通配符来限定主机的变更了。 [root@centos01 ~]# ansible 192.168.1.* -m command -a "systemctl status httpd" 192.168.100.20 | SUCCESS | rc=0 >> ....... <!--此处省略部分内容--> 192.168.100.30 | SUCCESS | rc=0 >> ....... <!--此处省略部分内容--> <!--实验环境,效果一样,这里就不多说了--> 3、Ansible命令Ansible的维护命令大多数是以ansible开头,在终端输入ansible后连续按两次Tab键,会补全所有跟ansible相关的命令。
[root@centos01 ~]# ansible <!--连续按Tab键--> ansible ansible-console-2 ansible-galaxy ansible-playbook-2.7 ansible-vault-2 ansible-2 ansible-console-2.7 ansible-galaxy-2 ansible-pull ansible-vault-2.7 ansible-2.7 ansible-doc ansible-galaxy-2.7 ansible-pull-2 ansible-connection ansible-doc-2 ansible-playbook ansible-pull-2.7 ansible-console ansible-doc-2.7 ansible-playbook-2 ansible-vault 1)ansibleansible是生产环境中使用非常频繁的命令之一,主要在以下场景使用:
非固化需求;
临时一次性操作;
二次开发接口调用;