Ansible部署
一、管理Ansible配置文件
清单文件位置
系统默认的清单文件位置是/etc/ansible/hosts
,通常我们不使用该文件,而是在Ansible配置文件中为清单定义一个不同的位置。
[root@client ansible]# vim ansible.cfg
#inventory = /etc/ansible/hosts
inventory = /etc/ansible/inventory #资源清单inventory文件的位置
ansible配置文件设置
Ansible配置文件由几个部分组成,每一部分含有以键值对形式定义的设置。
- [defaults] 部分设置Ansible操作的默认值
- [privilege_escalation] 配置Ansible如何在受管主机上执行特权升级
#常见的参数
[defaults]
inventory = /etc/ansible/hosts #指定清单路径
library = /usr/share/my_modules/ #指向存放ansible模块的路径
forks = 5 #开发连接数
sudo_user = root #设置默认执行命令的用户
remote_port = 22 #指定连接被管节点的管理端口,默认为22端口
[privilege_escalation]
become = true #连接后是否自动在受管主机上切换用户
become_method = sudo #如何切换用户,默认sudo
become_user = root #要在受管主机上切换到的用户,默认root
become_ask_pass = false #是否需要为become_method提示输入密码,默认false
Ansible命令
ansible命令执行状态:
- 绿色:执行成功并且不需要做改变
- 黄色:执行成功并且对目标主机做更改
- 红色:执行失败
[root@client ansible]# ansible -h
Usage: ansible <host-pattern> [options]
Options:
-a MODULE_ARGS, --args=MODULE_ARGS #模块的参数,如果执行默认COMMAND的模块
module arguments #m模块参数
--list-hosts #显示主机列表,可简写-list
-m MODULE_NAME, --module-name=MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-U SUDO_USER, --sudo-user=SUDO_USER #sudo到哪个用户,默认为 root
--version show program's version number and exit #输出ansible的版本
-v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging) #详细信息
-h, --help show this help message and exit #打开帮助文档API
-k, --ask-pass ask for SSH password #登录密码,提示输入SSH密码而不是假设基于密钥的验证
配置链接
Ansible需要知道如何与其受管主机通信。更改配置文件的一个最常见原因是为了控制Ansible使用什么方法和用户来管理受管主机。需要的一些信息包括:
- 列出受管主机和主机组的清单的位置
- 要使用哪一种连接协议来与受管主机通信(默认为SSH),以及是否需要非标准网络端口来连接服务器
- 要在受管主机上使用哪一远程用户;这可以是root用户或者某一非特权用户
- 如果远程用户为非特权用户,Ansible需要知道它是否应尝试将特权升级为root以及如何进行升级(例如,通过sudo)
- 是否提示输入SSH密码或sudo密码以进行登录或获取特权
连接设置
默认情况下Ansible使用ssh协议连接受管主机。控制Ansible连接受管主机的重要参数在[defaults]
部分中。
默认情况下Ansible连接受管主机时使用的用户名与运行ansible命令的本地用户相同。若要指定不同的用户,将remote_user
参数设置该用户名。
如果运行Ansible的本地用户配置了SSH私钥,使得他们能够在受管主机上进行远程用户的身份验证,则Ansible将自动登录。如果没有配置私钥,可以通过指令ask_pass = true
,将Ansible配置为提示本地用户输入由远程用户使用的密码。
remote_user = root
ask_pass = true
升级特权
鉴于安全性和审计原因,Ansible可能需要先以非特权用户身份连接远程主机,然后再通过特权升级获得root用户身份的管理权限。这可以在Ansible配置文件的[privilege_escalation]
部分中设置。
要默认启用特权升级,可以在配置文件中设置指令b