Ansible 安装及指令
1. 安装Ansible
-
ansible安装常用两种方式,yum安装和pip程序安装
-
这里提供二种安装方式,任选一种即可
1.使用yum 安装 $ yum install ansible –y 2.使用pip :pip是安装Python包的管理器,类似yum $ pip install ansible 如果没pip,需先安装pip.yum可直接安装: $ yum install python-pip $ pip install ansible
-
确认安装: ansible --version 查询版本
2. Ansible配置文件
-
ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)
[defaults] #inventory = /etc/ansible/hosts # 主机列表配置文件 #library = /usr/share/my_modules/ # 库文件存放目录 #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录 #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录 #forks = 5 # 默认并发数 #sudo_user = root # 默认sudo用户 #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码 #ask_pass = True #remote_port = 22 #host_key_checking = False # 检查对应服务器的host_key,建议取消注释 #log_path=/var/log/ansible.log #日志文件 #module_name = command #默认模块
-
sudo_user:
- 这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数。配置实例如下:
- sudo_user = root
- 这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数。配置实例如下:
-
remote_port:
- 这是指定连接被管节点的管理端口,默认是22。除非设置了特殊的SSH端口,不然这个参数一般是 不需要修改的。配置实例如下:
- remote_port = 80
- 这是指定连接被管节点的管理端口,默认是22。除非设置了特殊的SSH端口,不然这个参数一般是 不需要修改的。配置实例如下:
-
host_key_checking:
- 这是设置是否检查SSH主机的密钥。可以设置为True或False,关闭后第一次连接没有提示配置实例:
- host_key_checking = False
- 这是设置是否检查SSH主机的密钥。可以设置为True或False,关闭后第一次连接没有提示配置实例:
-
timeout:
- 这是设置SSH连接的超时间隔,单位是秒。配置实例如下:
- timeout = 60
- 这是设置SSH连接的超时间隔,单位是秒。配置实例如下:
-
log_path:
- Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path 来指定一个存储Ansible日志的文件。配置实例如下:
- log_path = /var/log/ansible.log
- Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path 来指定一个存储Ansible日志的文件。配置实例如下:
-
另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录
3. 配置文件、程序及命令
3.1 配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
3.2 程序
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具
3.3 ansible 命令
-
ansible
# ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点
-
ansible [-m module_name] [-a args]
--version 显示版本 -m module 指定模块,默认为command -v 详细过程 –vv -vvv更详细 --list-hosts 显示主机列表,可简写 --list -k, --ask-pass 提示输入ssh连接密码,默认Key验证 -K, --ask-become-pass 提示输入sudo时的口令 -C, --check 检查,并不执行 -T, --timeout=TIMEOUT 执行命令的超时时间,默认10s -u, --user=REMOTE_USER 执行远程执行的用户 -b, --become 代替旧版的sudo 切换 --become-user=USERNAME 指定sudo的runas用户,默认为root
-
-
ansible-playbook 定制任务,编排剧本
-
ansible-galaxy
# 连接 https://galaxy.ansible.com 下载相应的roles # 列出所有已安装的galaxy $ ansible-galaxy list # 安装galaxy $ ansible-galaxy install geerlingguy.redis # 删除galaxy $ ansible-galaxy remove geerlingguy.redis
-
ansible-vault
# 功能:管理加密解密yml文件 $ ansible-vault [create|decrypt|edit|encrypt|rekey|view] $ ansible-vault encrypt hello.yml 加密 $ ansible-vault decrypt hello.yml 解密 $ ansible-vault view hello.yml 查看 $ ansible-vault edit hello.yml 编辑加密文件 $ ansible-vault rekey hello.yml 修改口令 $ ansible-vault create new.yml 创建新文件
-
ansible-pull 推送命令至远程,效率无限提升,对运维要求较高
-
ansible-doc: 显示模块帮助
-
ansible-doc [options] [module…]
-a 显示所有模块的文档 -l, --list 列出可用模块 -s, --snippet显示指定模块的playbook片段
-
示例:
$ ansible-doc –l 列出所有模块 $ ansible-doc ping 查看指定模块帮助用法 $ ansible-doc –s ping 查看指定模块帮助用法
-
4. ansible的Host-pattern
4.1 ansible 命令
- 匹配主机的列表
- All:表示所有Inventory中的所有主机
- ansible all -m ping
- * :通配符
- ansible “” -m ping # 其中代表的意思就是all,所有的IP地址
- ansible 192.168.1.* -m ping # 匹配1.*的IP地址
- ansible “*srvs” -m ping
- 或关系
- ansible “websrvs:appsrvs” -m ping # 或关系,取IP地址的并集
- ansible “192.168.1.10:192.168.1.20” -m ping
- ansible的Host-pattern
- 逻辑与
- ansible “websrvs:&dbsrvs” -m ping # 与关系,取IP地址的交集
- 在websrvs组并且在dbsrvs组中的主机
- 逻辑非
- ansible ‘websrvs:!dbsrvs’ -m ping # 在websrvs中,取dbsrvs的反
- 在websrvs组,但不在dbsrvs组中的主机
- 注意:此处为单引号
- 综合逻辑
- ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ -m ping
- 正则表达式
- ansible “websrvs:&dbsrvs” -m ping
- ansible “~(web|db).*.magedu.com” -m ping
- All:表示所有Inventory中的所有主机
4.2 ansible 常用模块
- shell:可以使用shell命令,支持特殊字符和管道等,需要在/etc/ansible/ansible.cfg配置文件中开启功能:module_name = shell
- command:使用普通命令,不支持特殊字符和管道
- script:可以批量执行脚本
- copy:可以将本地文件批量复制到远端主机上
- fetch:可以将远端主机的文件批量复制到本地
- file:创建文件或者目录
- hostname:批量修改主机名
- cron:批量创建定时任务
- yum:批量安装软件
- service:批量启动服务
- user:批量创建用户
- group:批量创建组
- ****setup:****查机器的所有facts信息
4.3 ansible 使用前配置
-
Ansible配置公私钥
配置ansible 使用公钥验证 虽然ansible支持其他主机认证方式,但是我们最常用的的还是基于秘钥的认证:
-
首先生成秘钥
$ ssh-keygen -t rsa -P " " -f /root/.ssh/id_rsa
-
然后向主机分发秘钥:
$ ssh-copy-id root@ #@后面跟主机名或者IP地址3、如果出现以下情况: # ssh-copy-id -i root/.ssh/id_rsa.pub 10.1.6.72 -bash: ssh-copy-id: command not found 请尝试: yum -y install openssh-clientsansible
-
直接执行脚本批量将本地公钥传递到对方主机:
$ vim iplist.txt 将对方的主机IP地址写入 192.168.34.102 192.168.34.103 192.168.34.105 # 书写批量执行脚本 #!/bin/bash user=root password=000000 ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa while read ip ;do expect <<EOF set timeout 10 spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip expect { "yes/no" { send "yes\n";exp_continue } "password" { send "$password\n" } } expect eof EOF done < iplist.txt