Linux自动化工具之Ansible安装与简单批量管理
2020-02-21自动化运维90root391°c
A+ A-一、安装 Ansible
[[email protected] ~]# yum -y install ansible [[email protected] ~]# cat /etc/ansible/hosts \\ 默认文件已备份,下面是修改后的内容
[[email protected] ~]# ansible -i /etc/ansible/hosts vm1 -u root -m command -a 'll /home' -k \\ 提示我们需要安装sshpass
[[email protected] ~]# cd /usr/local/src/ [[email protected] src]# curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz [[email protected] src]# tar -zxvf sshpass-1.05.tar.gz [[email protected] sshpass-1.05]# ./configure [[email protected] sshpass-1.05]# make && make install
二、Ansible简单命令用法
1. 定义被管理主机IP地址
[[email protected] ~]# vim /etc/ansible/hosts
2. 批量创建ansible.txt文件
[[email protected] ~]# ansible -i /etc/ansible/hosts vm1 -uroot -m command -a 'touch /home/ansible.txt' -k
-i: 指定被管理主机配置文件(默认为/etc/ansible/hosts)
vm1表示/etc/ansible/hosts文件内的组名. 组名随意创建
-u: 指定用户(默认root)
-m: 指定模块(默认command)
-a: 指定执行命令
该命令简写如下:
[[email protected] ~]# ansible vm1 -a 'touch /home/vm1.txt' -k
3. 批量查看/home目录下文件
[[email protected] ~]# ansible vm1 -uroot -m command -a 'ls -l /home' -k
4. 配置ssh密钥
①. 单台机器发送密钥
[[email protected] ~]# ssh-keygen -t rsa \\下面提示按Enter
[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] \\将密钥发送到被管理主机 [[email protected] ~]# ssh [email protected] \\测试登陆被管理主机是否需要密码
②. 批量发送密钥
[[email protected] ~]# ansible vm1 -m copy -a 'src=/root/.ssh/id_rsa.pub dest=/root' -k [[email protected] ~]# ansible vm1 -m shell -a 'date' \\不加-k 批量查看被管理主机时间
三、Ansible默认/etc/ansible/hosts配置文件讲解
1. Inventory文件用来定义被管理的主机, 默认位置/etc/ansible/hosts。 一个简单的配置示例如下:
[test] 172.16.1.111 172.16.1.121 [mishare] 192.168.10.1 192.168.10.2 192.168.10.3 192.168.10.4 [tt] 192.168.20.1 192.168.20.2 192.168.20.3
说明:
[mishare], [tt]用于对主机进行分组, 并给其指定一个组名。主机可以直接使用IP地址,也可以使用域名. 还可以使用数字和字母来指定一系列连续主机. 如:
数字定义: 192.168.10.1 ...... 192.168.10.4 可以用192.168.10.[1:4]代替
字母定义: test[1:3].90root.com相当于test1.90root.com、test2.90root.com、test3.90root.com 前提域名能够解析到IP地址.
2. Inventory文件自定义用户名、端口、等。
我们知道, ansible通过ssh的方式来远程管理多台主机, 所以我们需要使用ssh key的方式来进行ssh认证, 当然, 你也可以选择在使用ansible的时候加上-k选项, 来通过交互的方式输入密码。
有了ssh key以后, 我们可以直接使用ansible来进行一些简单测试, 如下:
[[email protected] ~]# ansible all -m ping \\用于检测所有主机是否在线. all代表/etc/ansible/host文件内所有主机. all也可以改为组名
这个时候, 默认使用的root进行所有的远程管理, 在大多数的情况下, 为了安全期间, 人们更愿意使用一个普通账号进行管理, 我们可以在所有的被管理主机上创建一个ansible用户, 并让其可以使用sudo获取管理员权限, 当然在ansible主机上也需要有这么一个用户, 并为其生成ssh key。然后通过修改/etc/ansible/ansible.cfg配置文件里的remote_user以使ansible默认使用ansible用户进行管理, 然后使用--sudo参数来获取root权限, 你也可以通过修改/etc/ansible/ansible.cfg里的remote_port来修改默认的ssh端口. ansible -m ping --sudo
如果多台主机的管理账号各不相同, 我们也可以在inventory文件里分别进行设置, 如下:
[webserver] test1.90root.com ansible_ssh_user=work 192.168.1.12 ansible_ssh_user=ansible test2.90root.com ansible_ssh_user=work ansible_ssh_port=7789 test3.90root.com ansible_ssh_user=work ansible_ssh_port=7789 ansible_ssh_private_key_file=/home/work/.ssh/id_rsa.pub
简单说明:
ansible_ssh_user 指定被管理主机的账号
ansible_ssh_host 指定被管理的主机
ansible_ssh_port 指定被管理的主机ssh端口
ansible_ssh_private_key_file 指定key文件
ansible_key_checking=False 当第一次连接远程主机时, 会提示输入yes/no, 跳过此环节
3. Inventory文件内, 主机之间还可以嵌套, 需要使用关键字children, 如下
[[email protected] ~]# cat /etc/ansible/hosts [vm:children] vm2 vm3 [vm2] 192.168.15.12 [vm3] 192.168.15.13 [[email protected] ~]# ansible vm -m ping [[email protected] ~]# ansible vm2 -m ping [[email protected] ~]# ansible vm3 -m ping