Ansible实战

本文介绍了Ansible的概述,包括其特点、安装步骤、配置文件设置、常见模块如ping、command、shell、script、copy、file和service的使用方法以及命令执行返回值的颜色含义。此外,还提到Ansible的部署简单性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Ansible简介

  Ansible是基于Python语言开发的一款轻量级集中化运维工具,它默认采用SSH的方式管理客户端,再主控端部署Ansible环境,通过SSH远程管理被控制主机(节点)。Ansible提供了各种模块对客户端进行批量管理,包括执行命令、安装软件、执行特定任务等。对于一些复杂的需要重复执行的任务,可以通过Ansible下的playbook来管理。与其他运维软件相比,Ansible具有于以下几个特点。
  • 部署简单,只需要再主控端部署Ansible环境,被控端无需做任何操作。
  • 默认通过SSH协议对设备进行管理。
  • 配置简单,功能强大,扩展性强。
  • 支持API及自定义模块,可通过python轻松扩展。
  • 通过playbook来定制强大的配置、状态管理。
  • 对云计算平台、大数据有很好的支持。
  • 提供一个功能强大、可操作性强的web管理界面和REST API接口——AWX平台。
  Ansible是基于模块工作的,它本身只提供一个框架,并没有批量部署的能力,真正具有批量部署能力的是它所运行的模块。
  Ansible是基于安全性、高可靠性设计的轻量级集中化运维工具,功能强大、部署便捷,简单易学,现在已成为非常受欢迎的集中化运维工具,广泛应用于各种规模、各种领域的企业。


Ansible的安装

准备工作

在安装之前,准备3台主机,主机信息如下:

主机名IP地址操作系统
linuxserver192.168.11.88Ubuntu 22.04
LiuymRD192.168.11.82Debian
ShinyDemo.shinydev.nl192.168.11.81

linuxserver 主机是 Ansible 的管理主机,LiuymRD 和 ShinyDemo.shinydev.nl 是被管理的远程主机(节点),安装 Ansible 时只在管理机(192.168.11.88)上安装即可。

主机操作系统:Ubuntu 22.04
Ansible 版本:2.10.8

开始安装

安装命令:

# 更新系统中的软件包源列表
sudo apt-get update
# 搜索ansible软件包
sudo apt search ansible
# 安装ansible
sudo apt-get install ansible
# 检查是否安装完成
ansible --version

在这里插入图片描述
在这里插入图片描述

配置

通过上图可以看到,配置文件config file = None,需要到/etc/ansible下手动创建配置ansible.cfg 和 hosts文件。
在这里插入图片描述
ansible.cfg文件内容:

# 禁用密钥检查。或者将此主机的指纹添加到known_hosts文件中以管理此主机。
[defaults]
host_key_checking = False

hosts文件内容:

# 分别是IP,端口,账号和密码,一个[group]可以有多台服务器。
[group_name]
192.168.11.81:22 ansible_ssh_user=ymliu ansible_ssh_pass=ymliu2023
192.168.11.82:22 ansible_ssh_user=ymliu ansible_ssh_pass=ymliu2023

测试

ansible group_name -m ping

在这里插入图片描述
出现这个问题,是因为我们系统中没有sshpass,安装sshpass即可。(当然也可以设置为免密登录)

# 安装命令
sudo apt install sshpass

在这里插入图片描述
再次测试(警告信息暂时忽略
在这里插入图片描述

Ansible命令运行方式及常用参数

参数功能
-i指定hosts文件路径,默认在/etc/ansible/hosts
-m指定使用的module名称,默认command模块
-a指定模块参数
-k(小写)提示输入ssh密码,并非基于ssh密钥认证
-K(大写)提示输入sudo密码
-b使用sudo执行命令
-become-user=指定sudo的用户
-f,-forks=NUMNUM默认是整数5,指定fork开启同步进程的个数
-u指定远程主机的执行用户
-v详细模式,如果执行成功,输出详细结果,-vv -vvv更详细过程
-C预执行检测
-T执行命令的超时时间,默认10s
–list显示主机列表,也可以用–list-hosts
–version显示版本

Ansible常用模块

ping模块

检查指定(主机)节点是否还能连通,没有参数,主机如果在线则回复pong。即,上面测试内容。

ansible group_name -m ping

command模块与shell模块

command模块

在远程主机执行命令,此模块为默认模块

常用参数作用
chdir先切换工作目录,再执行后面的命令,一般情况下在编译时候使用;
creates如果creates的目录或文件存在,则不执行后面的操作;
removes和creates相反,如果removes的文件存在,才执行后面的操作;
ansible all -m command -a 'chdir=/home/ymliu pwd'
ansible all -m command -a 'chdir=/home/ymliu creates=/opt/local date'
ansible all -m command -a 'chdir=/home/ymliu removes=/opt/local date'

在这里插入图片描述
使用command模块,不得出现shell变量$name,也不得出现特殊符号> < | ; &这些符号command都不认识,如果你想要前面指定的变量,特殊符号,请使用shell模块,command模块就不适合了

shell模块

shell模块与command模块类似,但是shell被大家称为万能模块,很多操作command不支持,但是shell却支持。

常用参数作用
chdir先切换工作目录,再执行后面的命令,一般情况下在编译时候使用;
creates如果creates的目录或文件存在,则不执行后面的操作;
removes和creates相反,如果removes的文件存在,才执行后面的操作;
executable指定执行环境,默认为sh;
ansible all -m shell -a 'ps ax | grep java'
ansible all -m shell -a 'executable=/bin/bash ps ax | grep java'

在这里插入图片描述
在这里插入图片描述

ansible all -m shell -a "cat /etc/passwd |awk -F ':' '{print $1,$3}' >> /tmp/pwd.txt"

在这里插入图片描述
注意上面这种情况shell模块是不支持的。
这个时候我们就需要用到script模块

script

在ansible主机中写好的脚本在受控主机中执行。

常用参数作用
chdir先切换工作目录,再执行后面的命令,一般情况下在编译时候使用;
creates如果creates的目录或文件存在,则不执行后面的操作;
removes和creates相反,如果removes的文件存在,才执行后面的操作;
free_form必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机本地;

上图中遇到的错误,我们可以通过该模块解决,首先在用户根目录下创建可执行文件pasd.sh,添加如下内容,并赋予可执行权限。

# 需要添加到pasd.sh脚本中的内容
cat /etc/passwd |awk -F ':' '{print $1,$3}' >> /tmp/pwd.txt

# 执行命令如下:
ansible 192.168.11.82 -m script -a 'chdir=/home/ymliu /home/ymliu/pasd.sh'

在这里插入图片描述
在这里插入图片描述

copy模块

复制本地文件至远程主机,并且能够改属性等。

常用参数作用
src需要copy的文件的源路径
dest需要copy的文件的目标路径
backup对copy的文件进行备份
content直接在远程主机被管理文件中添加内容,会覆盖原文件内容
mode对copy到远端的文件设置权限
owner对copy到远端的文件设置属主
group对copy到远端文件设置属组
ansible 192.168.11.82 -m copy -a 'src=/home/ymliu/pasd.sh dest=/home/ymliu/pasd.sh backup=yes'
ansible 192.168.11.82 -m copy -a 'src=/home/ymliu/pasd.sh dest=/home/ymliu/pasd.sh backup=yes mode=0755'

在这里插入图片描述
在这里插入图片描述

file模块

主要用户远程主机上的文件操作。

常用参数作用
path指定文件名称
state指定操作状态
touch:建立
absent:删除
directory:递归目录
link:建立软链接
hard:建立硬链接
mode设定权限
owner设定文件用户
group设定文件组
src源文件
dest目标文件
recurse=yes递归更改
ansible 192.168.11.82 -m file -a 'src=/etc/passwd path=/tmp/passwd.link state=link'
ansible 192.168.11.82 -m file -a 'src=/etc/passwd path=/tmp/passwd state=touch mode=0644 owner=ymliu group=ymliu'

service模块

常用参数作用
name指定文件名称
state指定对服务的动作
started、stoped、restarted、reloaded
enabled设定开机是否启动
yes开机启动;no开机不启动
ansible all -m service -a 'name=firewalld state=started enabled=yes'
ansible all -m shell -a 'systemctl status firewalld.service'
ansible all -m service -a 'name=firewalld state=stopped enabled=no'

Ansible命令执行返回值颜色所代表的信息

颜色信息
绿色执行成功但未对远程主机做任何改变
黄色执行成功并对远程主机做改变
红色执行失败

未完待补充。。。

交流Linux运维工作、学习经验,欢迎添加QQ群:418251587
或者添加微信:lxs1266L,拉进微信群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值