自动化运维 - Ansible
# 简介
一个使用 Python 开发的自动化运维工具
- 批量 SSH
- 无需客户端:基于 SSH 实现
# 安装
只需安装在本机
pip install ansible
# 检查
ansible ---version
# 免密登录 (可选)
由于是基于 SSH 实现的群控,因此要么密码登录、要么公钥登录,如果是使用 cloud-init 部署的服务器,在模板中添加控制机的公钥到被控机上即可轻松实现,如果没有这么做,可参考 SSH 密钥对 - ssh-keygen
ssh-copy-id username@your_server_ip
# 配置
Building an inventory — Ansible Community Documentation (opens new window) ansible 支持 2 个格式的配置:ini、yaml
# ini
创建一个项目目录,用于存放主机清单 (inventory) 配置
mkdir ansible_inventory
cd ansible_inventory
vim inventory.ini
inventory.ini
[myhosts]
# 别名 ansible_host=主机ip ansible_port=ssh端口 ansible_user=用户名 ansible_password=密码
192.0.2.50
192.0.2.51
192.0.2.52
创建 myhosts
组,下面有: 192.0.2.50
、 192.0.2.51
、 192.0.2.52
# 校验配置
ansible-inventory -i inventory.ini --list
# 测试配置连通性
ansible 组名 -m ping -i inventory.ini
# yaml(推荐)
myhosts:
hosts:
my_host_01:
ansible_host: 192.0.2.50
my_host_02:
ansible_host: 192.0.2.51
my_host_03:
ansible_host: 192.0.2.52
# 基本命令
# ansible
# -m 模块名
# -u <username>
# -k 回车后,输入密码连接
# -i inventory配置文件路径;不填默认读取/etc/ansible/hosts(hosts是文件)
# 测试配置连通性
ansible 组名|别名 -m ping -i inventory.ini
# 模块与场景
# 文件分发 - copy
ansible 组名 -m copy -a 'src=本机文件路径 dest=目标主机路径 owner=文件所有者 group=组 mode=权限(777)'
# ansible 组名 -m copy -a 'src=/tmp/aaa.txt dest=/tmp/bbb.txt'
# 添加backup=yes:备份目标主机原文件为`原文件+时间`
# 文件收集 - fetch
ansible 别名 -m fetch -a "src=目标主机路径 dest=本机文件路径"
# ansible host4 -m fetch -a "src=/tmp/file23.txt dest=/root/"
# 定时任务 - cron
ansible 组名 -m cron -a 'name="sync time from ntpserver" minute="*/10" job="/sbin/ntpdate 192.168.174.129 &> /dev/null"'
# 执行脚本 - script
ansible 组名 -m script -a "本机脚本路径"
# ansible 组名 -m script -a "/root/haha.sh"
# 解压到目标主机 - unarchive
ansible 组名 -m unarchive -a 'src=/root/111.tar dest=/home'
# 执行命令 - shell
ansible 组名 -m shell -a '命令'
# ansible 组名 -m shell -a 'hostname'
# 参考
上次更新: 2024/11/18, 18:01:37