什么是Ansibleansible是新出现的自动化运维工具基于python开发集合了很多的运维工具puppet、chef、func、fabric的优点实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于paramiko开发的并且基于模块化工作它本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块ansible只是提供一种框架ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经被红帽官方收购是自动化运维工具认可度最高的。更加详细的资源参考官方文档如右是Ansible的官方网站Ansible DocumentationAnsible的特点部署简单只需要在主控端部署Ansible环境被控端无需做任何操作默认使用SSH协议对设备进行管理有大量的常规运维操作模块可实现日常绝大部分的操作配置简单、功能强大、扩展性强支持API以及自定义模块可以通过Python轻松扩展通过Playbooks来定制强大的配置、状态管理轻量级、无需在客户端安装agent更新时只需在操作机上进行一次更新即可提供一个功能强大、操作性强的web管理界面和REST API接口——AWX平台。ansible任务执行模式ansible系统由控制主机被管节点的操作方式可以分为两类即adhoc和playbookad-hoc模式点对点模式使用单个模块支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令而且不需要保存起来的命令。就相当于bash中的一句话shellplaybook模式剧本模式剧本模式是Ansible的主要管理方式也是Ansible功能强大的关键所在。playbook通过多个task任务集合完成一类功能比如web服务的安装部署、数据库服务的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件ansible命令执行过程背会加载自己的配置文件默认为/etc/ansible/ansible.cfg查找对应的主机配置文件找到要执行的主机或者组加载自己对应的模块文件如command通过ansible将模块或者命令生成对应的py文件python脚本并且将该文件传输到远程服务器对应执行用户的家目录.ansible/tmp/xxx/xxx.py文件给文件添加执行权限执行并且返回结果删除临时的py文件 sleep 0退出ansible的配置文件查找顺序背会ansible与我们其他的服务在这一点上又很大的不同这里的配置文件查找是从多个地方找的顺序如下1.检查环境变量 ANSIBLE_CONFIG 指向的路径文件export ANSIBLE_CONFIG/etc/ansible/ansible.cfg;2. ~/.ansible.cfg检查当前目录下的ansible.cfg配置文件3./etc/ansible.cfg检查etc目录的配置文件。ansible的程序结构yum安装为例配置文件目录/etc/ansible/执行文件目录/usr/bin/Lib库依赖目录/usr/lib/pyhtonX.X/site-packages/ansible/Help文档目录/usr/share/doc/ansible-X.X.X/Man文档目录/usr/share/man/man1/yum安装是我们比较熟悉的安装方式。我们需要先安装一个epel-release包然后再安装ansibleyum install epel-release -yyum install ansible -y编译文件添加要管控的节点vim /etc/ansible/hosts 添加IP地址和命名生成密钥对ssh-keygen 密钥每次生成都不一样生成后上一个就不能用了传公钥到目标机器ssh-copy-id 192.168.11.129验证是否连接成功ansible 192.168.11.129 -m shell -a ls -l /root通用基础参数多模块共用name作用指定包名、服务名、任务名称# yum模块安装dhcpd软件包 ansible 192.168.11.128 -m yum -a namedhcpd statepresent# service模块操作nginx服务 ansible 192.168.11.128 -m service -a namenginx statestartedstate作用定义资源最终状态不同模块取值不同# yum模块ansible 192.168.11.128 -m yum -a namenginx statepresent # 安装ansible 192.168.11.128 -m yum -a namenginx statelatest # 升级到最新ansible 192.168.11.128 -m yum -a namenginx stateabsent # 卸载 #service模块ansible 192.168.11.128 -m service -a namenginx statestarted # 启动ansible 192.168.11.128 -m service -a namenginx statestopped # 停止ansible 192.168.11.128 -m service -a namenginx staterestarted# 重启# file模块ansible 192.168.11.128 -m file -a path/test statedirectory # 创建目录ansible 192.168.11.128 -m file -a path/1.txt statetouch # 创建空文件ansible 192.168.11.128 -m file -a path/test stateabsent # 删除文件/目录enabled作用配置服务开机自启仅service模块使用ansible 192.168.11.128 -m service -a namenginx enabledyes # 开启开机自启ansible 192.168.11.128 -m service -a namenginx enabledno # 关闭开机自启chdir作用执行命令前先切换到指定目录# 切换到/opt目录执行ls查看文件 ansible 192.168.11.128 -m shell -a chdir/opt ls -l# 切换到/home目录创建文件夹 ansible 192.168.11.128 -m shell -a chdir/home mkdir testdircommand /shell 模块专属creates作用判断文件存在就跳过执行命令避免重复操作# 若/opt/lock.txt已存在就不执行touch命令ansible 192.168.11.128 -m shell -a chdir/opt creates/opt/lock.txt touch lock.txtremoves作用判断文件不存在就跳过执行命令# 若/opt/run.sh不存在就不执行脚本ansible 192.168.11.128 -m shell -a chdir/opt removes/opt/run.sh sh run.shcopy 模块文件拷贝常用参数src作用本地源文件 / 源目录路径dest作用远程主机目标路径# 把本地/root/1.txt 拷贝到远程 /tmp/ 下ansible 192.168.11.128 -m copy -a src/root/1.txt dest/tmp/# 写入are you ok到目标主机/opt/f2.txt文件中并赋权 把修改前的文件备份在同目录下ansible 192.168.11.128 -m copy -a contentare you ok? dest/opt/f2.txt mode777 backupyesowner / group作用设置文件所属用户、所属组# 拷贝后指定属主、属组为rootansible 192.168.11.128 -m copy -a src/root/1.txt dest/tmp/1.txt ownerroot grouprootmode作用设置文件权限八进制# 拷贝文件并设置权限755ansible 192.168.11.128 -m copy -a src/root/run.sh dest/tmp/run.sh mode0755file 模块文件 / 目录管理path作用指定要操作的文件 / 目录路径旧版本也可用dest# 创建/software目录ansible 192.168.11.128 -m file -a path/software statedirectory mode0755 ownerroot创建用户生成123的密文密码openssl passwd -1 123创建用户密码123$符号前要加转义符\ansible testpc -m user -a namezhangs password\$1\$YQ95Kwoj\$zl3/WhADN52TxlYT3bJ4W0script模块script模块用于将本机的脚本在被管理端的机器上运行。该模块直接指定脚本的路径即可提前准备好脚本ansible webs -m script -a /root/useradd.shcron模块给所有 web 组主机添加一个每 5 分钟执行一次/sbin/ifconfig的定时任务任务名称为 ifconfig every 5 minansible web -m cron -a nameifconfig every 5 min minute*/5 job/sbin/ifconfig文件在目标主机/var/spool/cron/目录下综合组合示例日常高频用法安装软件 启动 开机自启# 安装httpdansible 192.168.11.128 -m yum -a namehttpd statepresent# 启动并设置开机自启ansible 192.168.11.128 -m service -a namehttpd statestarted enabledyes切换目录执行脚本ansible 192.168.11.128 -m shell -a chdir/usr/local/scripts sh start.sh拷贝配置文件 赋权ansible 192.168.11.128 -m copy -a src/root/nginx.conf dest/etc/nginx/nginx.conf mode0644 ownerrootsetup模块setup模块主要用于收集信息是通过调用facts组件来实现的facts组件时Ansible用于采集被管理机器设备信息的一个功能。我们可以使用setup模块查看机器的所有facts信息可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据文件中ansible_facts是最上层的值。facts就是变量内建变量。每个主机的各种信息cpu个数内存的大小等。会存在facts中的某个变量中调用后返回很多对应主机的信息在后面的操作中可以根据不同的信息来做不同的操作。比如redhat系列用yum安装而debian系列用apt安装软件查看信息实例查看被管理主机的内存过滤只显示mem信息ansible web -m setup -a filter*mem*
Linux学习-ansible自动化
发布时间:2026/5/26 19:15:59
什么是Ansibleansible是新出现的自动化运维工具基于python开发集合了很多的运维工具puppet、chef、func、fabric的优点实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于paramiko开发的并且基于模块化工作它本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块ansible只是提供一种框架ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经被红帽官方收购是自动化运维工具认可度最高的。更加详细的资源参考官方文档如右是Ansible的官方网站Ansible DocumentationAnsible的特点部署简单只需要在主控端部署Ansible环境被控端无需做任何操作默认使用SSH协议对设备进行管理有大量的常规运维操作模块可实现日常绝大部分的操作配置简单、功能强大、扩展性强支持API以及自定义模块可以通过Python轻松扩展通过Playbooks来定制强大的配置、状态管理轻量级、无需在客户端安装agent更新时只需在操作机上进行一次更新即可提供一个功能强大、操作性强的web管理界面和REST API接口——AWX平台。ansible任务执行模式ansible系统由控制主机被管节点的操作方式可以分为两类即adhoc和playbookad-hoc模式点对点模式使用单个模块支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令而且不需要保存起来的命令。就相当于bash中的一句话shellplaybook模式剧本模式剧本模式是Ansible的主要管理方式也是Ansible功能强大的关键所在。playbook通过多个task任务集合完成一类功能比如web服务的安装部署、数据库服务的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件ansible命令执行过程背会加载自己的配置文件默认为/etc/ansible/ansible.cfg查找对应的主机配置文件找到要执行的主机或者组加载自己对应的模块文件如command通过ansible将模块或者命令生成对应的py文件python脚本并且将该文件传输到远程服务器对应执行用户的家目录.ansible/tmp/xxx/xxx.py文件给文件添加执行权限执行并且返回结果删除临时的py文件 sleep 0退出ansible的配置文件查找顺序背会ansible与我们其他的服务在这一点上又很大的不同这里的配置文件查找是从多个地方找的顺序如下1.检查环境变量 ANSIBLE_CONFIG 指向的路径文件export ANSIBLE_CONFIG/etc/ansible/ansible.cfg;2. ~/.ansible.cfg检查当前目录下的ansible.cfg配置文件3./etc/ansible.cfg检查etc目录的配置文件。ansible的程序结构yum安装为例配置文件目录/etc/ansible/执行文件目录/usr/bin/Lib库依赖目录/usr/lib/pyhtonX.X/site-packages/ansible/Help文档目录/usr/share/doc/ansible-X.X.X/Man文档目录/usr/share/man/man1/yum安装是我们比较熟悉的安装方式。我们需要先安装一个epel-release包然后再安装ansibleyum install epel-release -yyum install ansible -y编译文件添加要管控的节点vim /etc/ansible/hosts 添加IP地址和命名生成密钥对ssh-keygen 密钥每次生成都不一样生成后上一个就不能用了传公钥到目标机器ssh-copy-id 192.168.11.129验证是否连接成功ansible 192.168.11.129 -m shell -a ls -l /root通用基础参数多模块共用name作用指定包名、服务名、任务名称# yum模块安装dhcpd软件包 ansible 192.168.11.128 -m yum -a namedhcpd statepresent# service模块操作nginx服务 ansible 192.168.11.128 -m service -a namenginx statestartedstate作用定义资源最终状态不同模块取值不同# yum模块ansible 192.168.11.128 -m yum -a namenginx statepresent # 安装ansible 192.168.11.128 -m yum -a namenginx statelatest # 升级到最新ansible 192.168.11.128 -m yum -a namenginx stateabsent # 卸载 #service模块ansible 192.168.11.128 -m service -a namenginx statestarted # 启动ansible 192.168.11.128 -m service -a namenginx statestopped # 停止ansible 192.168.11.128 -m service -a namenginx staterestarted# 重启# file模块ansible 192.168.11.128 -m file -a path/test statedirectory # 创建目录ansible 192.168.11.128 -m file -a path/1.txt statetouch # 创建空文件ansible 192.168.11.128 -m file -a path/test stateabsent # 删除文件/目录enabled作用配置服务开机自启仅service模块使用ansible 192.168.11.128 -m service -a namenginx enabledyes # 开启开机自启ansible 192.168.11.128 -m service -a namenginx enabledno # 关闭开机自启chdir作用执行命令前先切换到指定目录# 切换到/opt目录执行ls查看文件 ansible 192.168.11.128 -m shell -a chdir/opt ls -l# 切换到/home目录创建文件夹 ansible 192.168.11.128 -m shell -a chdir/home mkdir testdircommand /shell 模块专属creates作用判断文件存在就跳过执行命令避免重复操作# 若/opt/lock.txt已存在就不执行touch命令ansible 192.168.11.128 -m shell -a chdir/opt creates/opt/lock.txt touch lock.txtremoves作用判断文件不存在就跳过执行命令# 若/opt/run.sh不存在就不执行脚本ansible 192.168.11.128 -m shell -a chdir/opt removes/opt/run.sh sh run.shcopy 模块文件拷贝常用参数src作用本地源文件 / 源目录路径dest作用远程主机目标路径# 把本地/root/1.txt 拷贝到远程 /tmp/ 下ansible 192.168.11.128 -m copy -a src/root/1.txt dest/tmp/# 写入are you ok到目标主机/opt/f2.txt文件中并赋权 把修改前的文件备份在同目录下ansible 192.168.11.128 -m copy -a contentare you ok? dest/opt/f2.txt mode777 backupyesowner / group作用设置文件所属用户、所属组# 拷贝后指定属主、属组为rootansible 192.168.11.128 -m copy -a src/root/1.txt dest/tmp/1.txt ownerroot grouprootmode作用设置文件权限八进制# 拷贝文件并设置权限755ansible 192.168.11.128 -m copy -a src/root/run.sh dest/tmp/run.sh mode0755file 模块文件 / 目录管理path作用指定要操作的文件 / 目录路径旧版本也可用dest# 创建/software目录ansible 192.168.11.128 -m file -a path/software statedirectory mode0755 ownerroot创建用户生成123的密文密码openssl passwd -1 123创建用户密码123$符号前要加转义符\ansible testpc -m user -a namezhangs password\$1\$YQ95Kwoj\$zl3/WhADN52TxlYT3bJ4W0script模块script模块用于将本机的脚本在被管理端的机器上运行。该模块直接指定脚本的路径即可提前准备好脚本ansible webs -m script -a /root/useradd.shcron模块给所有 web 组主机添加一个每 5 分钟执行一次/sbin/ifconfig的定时任务任务名称为 ifconfig every 5 minansible web -m cron -a nameifconfig every 5 min minute*/5 job/sbin/ifconfig文件在目标主机/var/spool/cron/目录下综合组合示例日常高频用法安装软件 启动 开机自启# 安装httpdansible 192.168.11.128 -m yum -a namehttpd statepresent# 启动并设置开机自启ansible 192.168.11.128 -m service -a namehttpd statestarted enabledyes切换目录执行脚本ansible 192.168.11.128 -m shell -a chdir/usr/local/scripts sh start.sh拷贝配置文件 赋权ansible 192.168.11.128 -m copy -a src/root/nginx.conf dest/etc/nginx/nginx.conf mode0644 ownerrootsetup模块setup模块主要用于收集信息是通过调用facts组件来实现的facts组件时Ansible用于采集被管理机器设备信息的一个功能。我们可以使用setup模块查看机器的所有facts信息可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据文件中ansible_facts是最上层的值。facts就是变量内建变量。每个主机的各种信息cpu个数内存的大小等。会存在facts中的某个变量中调用后返回很多对应主机的信息在后面的操作中可以根据不同的信息来做不同的操作。比如redhat系列用yum安装而debian系列用apt安装软件查看信息实例查看被管理主机的内存过滤只显示mem信息ansible web -m setup -a filter*mem*