ansible 的安装和使用
介绍:
ansible 是一个自动化运维工具, 通过 SSH 协议管理服务器, 基于模块来完成自动化任务, ansible 完成批量性任务, 自动部署各种服务和环境.
安装
使用 python3 的 pip 工具安装: pip3 install ansible
开始使用:
管理的前提条件:
管控机可通过 SSH 连接受控机. 建议设置密钥认证. 明文密码不安全.
管控端用户和受控端用户都是普通用户.
生成 SSH 密钥的命令: SSH-keygen -t rsa
私钥和公钥生成后默认在~/.SSH 目录下, ansible 管控端的公钥需要放在受控端的. SSH/authorized_keys 文件中.
执行命令:
SSH-copy-id -i ~/.SSH/id_rsa.pub yuan@192.168.1.1 -p200
这条命令会将公钥存放到 authorized_keys 文件中.
-i 选项指定要传输的公钥文件
指定用户和 IP, 端口等信息.
SSH 代理: SSH-agent
SSH-agent 可管理私钥.
使用不同密钥连接不同主机, SSH-agent 可自动选择对应的密钥进行认证.
密钥设置密码时, 也需要使用 SSH-agent 来管理.
启动 SSH 代理并添加密钥:
SSH-agent bash 执行后会在当前 shell 中启动一个默认 shell. SSH-agent 在子 shell 中执行.
eval SSH-agent 进入新创建的子 shell, 会启动一个 SSH-agent 进程.
SSH-agent -k 关闭 SSH-agent 代理.
SSH-agent 管理密钥:
将私钥添加到 SSH 代理:
SSH-add ~/.SSH/id_rsa_custom
查看 SSH 代理中已经添加了那些私钥:
SSH-add -l
列出代理中所有私钥对应的公钥内容:
SSH-add -L
从代理中移除某个已经添加的私钥:
SSH-add -d 要移除的私钥名称
清空代理中的所有私钥:
SSH-add -D
临时锁定 SSH 代理:
SSH-add -x
解锁 SSH 代理:
SSH-add -X
配置主机清单 (Inventory):
ansible 的配置清单为: /etc/ansible/hosts
- sudo mkdir /etc/ansible/
- sudo VIM /etc/ansible/hosts
[test] 组名称
192.168.1.1 ansible_port=200
测试
ansible test -m ping
生成密钥指定输出文件名称的方式:
在管控端执行:
- $SSH-keygen -t rsa -f id_rsa-test
- SSH-copy-id -i ~/.SSH/id_rsa-test.pub yuan@192.168.1.1 -p200
- SSH -p200 yuan@192.168.1.1
- yuan@192.168.1.1's password:
仍提示输入密码, 说明没有找到对应的私钥.
- SSH-agent bash
- eval SSH-agent
SSH-add ~/.SSH/id_rsa-test
再次 SSH -p2020 yuan@192.168.1.1 登录, 已经免密钥登录成功.
配置清单详解
分组功能:
将同一类型的应用主机分为一组, 通过组名管理组内的所有主机.
例如:
- [web]
- 192.168.1.3
- [db]
- 192.168.1.5
支持在组内嵌套组:
例如:
- [webA]
- 192.168.1.3
- [webB]
- 192.168.1.4
- [Web:children] // 表示当前组中存在子组.
- webA
- webB
建议采用在组内嵌套组的方法, 这样看起来逻辑更清晰.
支持 INI 配置
例如:
- [Web]
- 192.168.1.3
- [db]
- 192.168.1.5
支持 YAML 语法
YAML 语法:
第一行组名
第二行使用一个空格作为缩进. 使用 hosts 关键字.
第三行开头使用两个空格作为缩进.
第四行开头使用两个空格作为缩进.
例如:
- test:
- hosts:
- 192.168.1.1
- test1:
- ansible_host: 192.168.1.5
- ansible_port: 150
- 192.168.1.6:
在组中嵌套组的 YAML 写法:
- all:
- children:
- Web:
- children:
- webA:
- hosts:
- 192.168.1.3:
- webB:
- hosts:
- 192.168.1.4:
上述配置说明: Web 组有两个子组, 分别为 webA 组和 webB 组, 而这两个组分别有自己组内的主机.
建议采用 YAML 语法.
来源: http://www.bubuko.com/infodetail-2875347.html