一、环境
主机 | 系统 | 角色 |
192.168.10.200 | centos-7 | ansible管理 |
192.168.10.210 | centos-7 | 被管理主机 |
192.168.10.211 | centos-7 | 被管理主机 |
1 [root@ansible ~]# hostnamectl 2 Static hostname: ansible 3 Icon name: computer-vm 4 Chassis: vm 5 Machine ID: de646e2f538548169ed072b494dc78b2 6 Boot ID: 1b88c107784b42b9aa456cf4d1e4120c 7 Virtualization: vmware 8 Operating System: CentOS Linux 7 (Core) 9 CPE OS Name: cpe:/o:centos:centos:7 10 Kernel: Linux 3.10.0-693.el7.x86_64 11 Architecture: x86-64
二、安装ansible
安装ansible常用两种方式
1、使用yum安装
[root@ansible ~]# yum -y install ansible [root@ansible ~]# rpm -ql ansible /etc/ansible /etc/ansible/ansible.cfg /etc/ansible/hosts /etc/ansible/roles /usr/bin/ansible /usr/bin/ansible-2 /usr/bin/ansible-2.7 /usr/bin/ansible-config /usr/bin/ansible-connection /usr/bin/ansible-console /usr/bin/ansible-console-2 /usr/bin/ansible-console-2.7 /usr/bin/ansible-doc /usr/bin/ansible-doc-2 /usr/bin/ansible-doc-2.7 /usr/bin/ansible-galaxy /usr/bin/ansible-galaxy-2 ...........................
2、使用pip(python的包管理模块)安装
[root@ansible ansible]# pip install ansible [root@ansible ansible]# pip list|grep ansible ansible 2.5.3 [root@ansible ansible]# pip show ansible Name: ansible Version: 2.5.3 Summary: Radically simple IT automation Home-page: https://ansible.com/ Author: Ansible, Inc. Author-email: info@ansible.com License: GPLv3+ Location: /usr/lib/python2.7/site-packages Requires: jinja2, PyYAML, paramiko, cryptography, setuptools Required-by:
三、ansible配置
/etc/ansible /etc/ansible/ansible.cfg #ansible配置文件 /etc/ansible/hosts #ansible主机清单 /etc/ansible/roles #ansible角色的目录 /usr/bin/ansible #ansible命令工具
ansible.cfg文件
[defaults] # some basic default values... hostfile = /etc/ansible/hosts \\指定默认hosts配置的位置 # library_path = /usr/share/my_modules/ remote_tmp = $HOME/.ansible/tmp pattern = * forks = 5 poll_interval = 15 sudo_user = root \\远程sudo用户 #ask_sudo_pass = True \\每次执行ansible命令是否询问ssh密码 #ask_pass = True \\每次执行ansible命令时是否询问sudo密码 transport = smart remote_port = 22 module_lang = C gathering = implicit host_key_checking = False \\关闭第一次使用ansible连接客户端是输入命令提示 log_path = /var/log/ansible.log \\需要时可以自行添加。chown -R root:root ansible.log system_warnings = False \\关闭运行ansible时系统的提示信息,一般为提示升级 # set plugin path directories here, separate with colons action_plugins = /usr/share/ansible_plugins/action_plugins callback_plugins = /usr/share/ansible_plugins/callback_plugins connection_plugins = /usr/share/ansible_plugins/connection_plugins lookup_plugins = /usr/share/ansible_plugins/lookup_plugins vars_plugins = /usr/share/ansible_plugins/vars_plugins filter_plugins = /usr/share/ansible_plugins/filter_plugins fact_caching = memory [accelerate] accelerate_port = 5099 accelerate_timeout = 30 accelerate_connect_timeout = 5.0 # The daemon timeout is measured in minutes. This time is measured # from the last activity to the accelerate daemon. accelerate_daemon_timeout = 30
hosts主机清单
主机和主机组
192.168.10.200 #定义主机 [ansible] #定义主机组 192.168.10.200 [web_server] 192.168.10.210 192.168.64.211
----------------------------------------------------------------------
端口和别名
192.168.64.211:222
ansible_server ansible_ssh_port = 3333 ansible_ssh_host = 192.168.10.200
-----------------------------------------------------------------------
指定主机范围
[servers]
192.168.10.[100:200]
使用主机变量
ansible_ssh_host #用于指定被管理的主机的真实IP ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22 ansible_ssh_user #ssh连接时默认使用的用户名 ansible_ssh_pass #ssh连接时的密码 ansible_sudo_pass #使用sudo连接用户时的密码 ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径 ansible_ssh_private_key_file #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项 ansible_shell_type #目标系统的shell的类型,默认sh ansible_connection #SSH 连接的类型: local , ssh , paramiko,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提) ansible_python_interpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径 ansible_*_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以是ruby或才perl等其他语言
主机配置:使用用户和密码及端口配置
[web] 192.168.10.210 ansible_ssh_user=root ansible_ssh_pass='123456' 192.168.10.210 ansible_ssh_user=ops ansible_ssh_pass='123456' 192.168.10.211 ansible_ssh_user=manager ansible_ssh_port=3055 ansible_ssh_pass='456789'
主机与组正则匹配部分
1、表示所有的主机可以使用all 或 * 2、通配符与逻辑或 server.web.com 192.168.10.* *.web.com *.com webservers1[0] #表示匹配 webservers1 组的第 1 个主机 webservers1[0:25] #表示匹配 webservers1 组的第 1 个到第 25 个主机
四、ssh主机信任密钥配置
[root@ansible ~]# ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: SHA256:2mJq8FNVETmkzZsCaeZcxNgutl5FDUtuDXUUI58KKWE root@ansible The key's randomart image is: +---[DSA 1024]----+ | +E.BBo.=. | | .+oB==.+ o | | =.+oO.. o | | =oooo.+ . | | .o+S.o . | | . oo.. | | o o+.. | | +o.. | | ... | +----[SHA256]-----+
[root@ansible ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.10.210
[root@ansible ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.10.211
[root@ansible ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.10.200 #ansible管理
主机多可以使用脚本利用sshpass批量发送
测试主机清单配置
[root@ansible ~]# cat /etc/ansible/hosts
[ansible]
192.168.10.200
[web]
192.168.10.210
192.168.10.211
五、简单命令测试
[root@ansible ~]# ansible all -m shell -a "date" 192.168.64.129 | SUCCESS | rc=0 >> 2018年 05月 31日 星期四 08:43:02 EDT 192.168.64.131 | SUCCESS | rc=0 >> 2018年 05月 31日 星期四 20:43:03 CST 192.168.64.128 | SUCCESS | rc=0 >> 2018年 05月 31日 星期四 20:43:04 CST
[root@ansible ~]# ansible all -m shell -a "df -h"
192.168.64.131 | SUCCESS | rc=0 >>
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 2.2G 15G 13% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 13M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 134M 881M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.64.129 | SUCCESS | rc=0 >>
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 4.7G 13G 28% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.8M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.64.128 | SUCCESS | rc=0 >>
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 15G 2.4G 87% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 160K 488M 1% /dev/shm
tmpfs 489M 26M 463M 6% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@ansible ~]# ansible all -m shell -a "ss -tunl|grep 22"
192.168.64.129 | SUCCESS | rc=0 >>
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 :::22 :::*
192.168.64.131 | SUCCESS | rc=0 >>
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 :::22 :::*
192.168.64.128 | SUCCESS | rc=0 >>
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 :::22 :::*