千家信息网

Ansible的基础使用和快速入门

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Ansible其实一个it运维自动化工具,主要是完成it基础设施的配置应用的部署,可以对百十台的主机,上千台的主机进行管理,它一直强调的是:简单易用,所以我们就能很快的上手它,所以不需要好的基础能力简
千家信息网最后更新 2026年11月02日Ansible的基础使用和快速入门

Ansible其实一个it运维自动化工具,主要是完成it基础设施的配置应用的部署,可以对百十台的主机,上千台的主机进行管理,它一直强调的是:
简单易用,所以我们就能很快的上手它,所以不需要好的基础能力

简单-----减少学习的成本:它使用易读的描述语言部署的文件。
无需特殊编码技能:也就是它不需求你会开发,你就能很快的上手使用。
任务按顺序执行:ansible执行就是按你的任务从上到下依次去执行,所以很好去理解,很好的去写这个配置文件。

强大-----协调应用程序生命周期,因为一个应用程序的生命周期分为多个阶段,例如从代码的拉取到构建,然后再到部署,然后再到测试,一个应用的周期大概是这样的,ansible可以在这个应用周期中完成一系列任务
应用部署
配置管理
工作流程编排
我们可以通过刚才的那几个阶段去写配置文件,这样就能很清晰的看出这个应用程序到底要做哪些事,根据我们做那些事,我们再逐一的去分解
这也就是ansible的主要的功能

无代理----可预测,可靠和安全

无代理架构,也就是在一台服务器上安装ansible就可以了,而不需要在客户端再安装一个agent,
使用openssh通信,确保了安全性,
没有代理维护成本

Ansible相对比同类的saltstack他们都是使用python去编写的,在早些年saltstack市场占有率是远超ansible,而近几年市场占有率是远超saltstack的,其实主要的原因呢,就是跟它这个设计模式有关系,因为ansible最初呢讲究的就是无代理架构,而saltstack要在被管理端,要装一个agent,装一个很简单,要考虑后期的维护,所以根据现在的市场需求,很多情况下,在某些机器上安装一些复杂的agent和其他的一些工具,对于现在的企业it环境中,每个服务器上面都安装了很多的agent,有可能自己研发了被监控端的agent,日志的agent,回头再安装一些其他的agent,要初始化要舒适化四五个agent,久而久之就会增加很多额外的负载,而且不易于我们后期对服务器的管理,所以根据这个现状呢,ansible就用的it企业很多,而且ansible在它本身的这个配置下就是这么设计的,而且根据这种形态去扩展更多模块和功能,而saltstack,虽然已经支持了这种无代理架构,但是它是后来支持的,有很多功能的还是难于ansible去使用的。

Ansible的架构
![]

Users就是我们这个管理员用户,也就是我们,我们去批量管理主机,有两种方式,一个是执行命令,例如查看磁盘空间
第二种方式呢,就是playbook去管理比较复杂的任务,例如一个应用的部署

这个ansible引擎有4部分,第一个就是inventory,这个就是管理我们主机的一个清单,你去管理谁,就是在这体现的,包括主机的ip地址,端口,账户密码都是在这个inventory去输写的
第二个就是ansible的Api,它有api来供我们去调用,当我们去开发运维自动化平台的时候,不用去造轮子,就可以直接使用ansible的api去使用来完成你的批量管理。

第三个就是模块modules,ansible是一个自动化引擎,它很多的功能呢都是通过模块去实现的,例如去创建一个用户,那么它就有这个user这个账户,那么去管理一个服务,去启动一个服务那么久有这个service,强调之初呢就是它有非常多的模块。

第四个就是plugins,这个就是插件,这个相当于ansible来完成内部的一些操作,例如ansible怎么去管理这些主机,那么它就有这个contation的一个插件,通过这个插件呢去连接你这个主机,所以这个plugins是ansible的核心功能,而模块是ansible核心之外的扩展功能。

而ploybook可以通过这些模块去编写应用的生命周期,它就相当于一个文本,我们要在里面输写我们要做哪些事
如果要实现一个CMDB的一个功能,配置中心管理数据库,这个功能呢就记录了你的it基础设施中,一些主机的一些信息,通过这些信息呢,以供其他人去使用,供其他的项目去调用,有了ansible的话就能很快去获取这些信息,因为ansible可以在你的目标主机上去获取当前主机所有的一些硬件资源了,一些配置,各个信息都会帮你收集,只需要将你的数据收集到你的CMDB当中就可以了
而且ansible也有很多的模块和插件来对接这个云平台,不管是私有云还是公有云都会帮我们去做一些事,,这个就是一个ansible的一个架构

管理员通过操作ansible,ansible去调用一些模块和插件来读取,inventory的配置主机清单,去操作你操作的主机组。

Ansible的安装
我们可以直接通过yum去安装
[root@ansible ~]# yum -y install ansible
安装之后就是配置ansible,这里就是配置ansible的主机清单,这里可以使用把密码写上去,也可以提前做好免交互登录,就直接写ip也可以

[root@ansible ~]# vim /etc/ansible/hosts[webservers]10.4.7.12 ansible_ssh_user=root ansible_ssh_pass=66666610.4.7.21 ansible_ssh_user=root ansible_ssh_pass=666666

对我们执行的命令添加不需要指纹的交互

[root@ansible ~]# vim /etc/ansible/ansible.cfghost_key_checking = False

查看我们多主机节点的磁盘状态

[root@ansible ~]# ansible webservers -a "df -h"10.4.7.12 | SUCCESS | rc=0 >>Filesystem               Size  Used Avail Use% Mounted on/dev/mapper/centos-root   50G  1.4G   49G   3% /devtmpfs                 858M     0  858M   0% /devtmpfs                    870M     0  870M   0% /dev/shmtmpfs                    870M  8.4M  861M   1% /runtmpfs                    870M     0  870M   0% /sys/fs/cgroup/dev/sda2               1014M  179M  836M  18% /boot/dev/sda1                200M   12M  189M   6% /boot/efi/dev/mapper/centos-home   73G   33M   72G   1% /datatmpfs                    174M     0  174M   0% /run/user/010.4.7.21 | SUCCESS | rc=0 >>Filesystem               Size  Used Avail Use% Mounted on/dev/mapper/centos-root   50G  1.4G   49G   3% /devtmpfs                 3.8G     0  3.8G   0% /devtmpfs                    3.9G     0  3.9G   0% /dev/shmtmpfs                    3.9G  8.4M  3.8G   1% /runtmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup/dev/sda2               1014M  179M  836M  18% /boot/dev/sda1                200M   12M  189M   6% /boot/efi/dev/mapper/centos-home   73G   33M   72G   1% /datatmpfs                    779M     0  779M   0% /run/user/0

Ansible的使用要求
服务端的要求
Python2.6/2.7/3.x
Redhat,Debian,centos,os x等,不支持windows
因为ansible是python写的所以要有python的环境,ansible是在15年的10月份被redhat收购的,默认centos已经将python安装了
被管理端要求
Openssh,linux发行版一般也使用openssh,也需要python,会使用python的脚本,执行我们使用的模块,最终封装我们使用的脚本,在被管理端执行,结果返回给ansible
Python2.6/2.7/3.x

安装ansible的方式支持yum,也是推荐的方式,像redhat核debian都支持他们本身的软件包去安装ansible
也可以通过pip去安装,其实ansible也是python的一个模块
也可以通过源码包去安装
• https://releases.ansible.com/ansible or https://github.com/ansible/ansible.git

ansible的配置文件

[root@ansible ~]# vim /etc/ansible/ansible.cfgsome basic default values...#inventory      = /etc/ansible/hosts#library        = /usr/share/my_modules/#module_utils   = /usr/share/my_module_utils/#remote_tmp     = ~/.ansible/tmp#local_tmp      = ~/.ansible/tmp#forks          = 5#poll_interval  = 15#sudo_user      = root#ask_sudo_pass = True#ask_pass      = True#transport      = smart#remote_port    = 22#module_lang    = C#module_set_locale = False

有这几个重要的简单说一下,inventory -/etc/ansible/hosts
这是被管理端的主机清单
Fork是ansible工作进程的并发数,它默认是5个,可以根据自己管理主机的数量调整这个,同时提高这个并发数也会对你的服务器的负载增加消耗

Sudo_user:就是提权,在linux下如果你是普通用户,如果想root方式去执行操作时,那你是不是需要sudo,或者su -切到root用户操作,那这就称为提权。

Remote_port=22,操作目标主机的端口,ssh 默认22,这里也默认22

Host_key_checking=false 这个开启的话就会实现我们第一次登录一个主机时,可以免去敲yes/no,但是开启这个也有不好的,就是当我们的服务端重装系统了,那么这个地方就会失效报错,当然也可以解决,把know_hosts下的历史登录记录清除就可以,不过这个也不影响使用。
Log_path=/var/log/ansible.log 就是记录日志的,记录一些基本操作,可以开启一下
Private_key_file=/root/.ssh/id_rsa,这是指定密钥认证的私钥,连接linux的认证方式就是基于密码的认证,一个是基于密钥对的认证,基于密钥对的认证是相对于比较安全的,进行数字证书的效验,基于ssh的容易被破解,但是满足密码的复杂性也很难破解。

inventory主机清单
[root@ansible ~]# vim /etc/ansible/hosts
像ansible在操作我们基础设施主机的时候,都是通过这个/etc/ansible/hosts去操作的
这个配置中有属于这种未分组的组,它会分配到auto的组中,也就是默认组,我们可以根据IP,或者主机名进行配置,

Ex 1: Ungrouped hosts, specify before any group headers.green.example.comblue.example.com192.168.100.1192.168.100.10

Ansible的执行命令的使用方法
[root@ansible ~]# ansible --help
Usage: ansible [options]
主机的模式->选项,就是在你的主机清单中匹配
这个all就是匹配你所有的主机组,不加主机组也会匹配上
-m command可以省略,这是默认的

[root@ansible ~]# ansible all  -a "free -m"10.4.7.12 | SUCCESS | rc=0 >>              total        used        free      shared  buff/cache   availableMem:           1738         121        1475           8         141        1456Swap:          3839           0        383910.4.7.21 | SUCCESS | rc=0 >>              total        used        free      shared  buff/cache   availableMem:           7785         162        7479           8         143        7403Swap:          3839           0        383910.4.7.22 | SUCCESS | rc=0 >>              total        used        free      shared  buff/cache   availableMem:           7785         159        7482           8         144        7406Swap:             0           0           0

也可以使用直接输入ip同样也可以查看到

[root@ansible ~]# ansible 10.4.7.12 -a "df -h"10.4.7.12 | SUCCESS | rc=0 >>Filesystem               Size  Used Avail Use% Mounted on/dev/mapper/centos-root   50G  1.4G   49G   3% /devtmpfs                 858M     0  858M   0% /devtmpfs                    870M     0  870M   0% /dev/shmtmpfs                    870M  8.4M  861M   1% /runtmpfs                    870M     0  870M   0% /sys/fs/cgroup/dev/sda2               1014M  179M  836M  18% /boot/dev/sda1                200M   12M  189M   6% /boot/efi/dev/mapper/centos-home   73G   33M   72G   1% /datatmpfs                    174M     0  174M   0% /run/user/0

然后就是变量,能与用户动态的交互,传参,来让ansible来做指定的事情,这样就能更灵活一些。

Ansible的官方文档是docs.ansible.com
一般经常用的ansible和ploybook,doc
其他的模块也很多,暂时也用不上
比如变量的使用

[webservers]10.4.7.21 ansible_ssh_user=root ansible_ssh_pass=666666 http_port=8010.4.7.22 ansible_ssh_user=root ansible_ssh_pass=666666 http_port=80[root@ansible ~]# ansible webservers -a "echo {{http_port}}"10.4.7.22 | SUCCESS | rc=0 >>8010.4.7.21 | SUCCESS | rc=0 >>80

组变量的使用,定义这个vars,使用的时候就会调用这个变量

[webservers:vars]http_port=8080server_name=www.devops.com[root@ansible ~]# ansible webservers -a "echo {{http_port}}"10.4.7.21 | SUCCESS | rc=0 >>808010.4.7.22 | SUCCESS | rc=0 >>8080[root@ansible ~]# ansible webservers -a "echo {{server_name}}"10.4.7.22 | SUCCESS | rc=0 >>www.devops.com10.4.7.21 | SUCCESS | rc=0 >>www.devops.com

也可以单独写到/etc/ansible/group_vars/webservers.yml下,它默认会读取你哪个组里面的变量,以yml的模式更方便
http_port: 8090
server_name: xiabanle

[root@ansible group_vars]# ansible webservers -a "echo {{http_port}}"10.4.7.22 | SUCCESS | rc=0 >>809010.4.7.21 | SUCCESS | rc=0 >>8090[root@ansible group_vars]# ansible webservers -a "echo {{server_name}}"10.4.7.22 | SUCCESS | rc=0 >>xiabanle10.4.7.21 | SUCCESS | rc=0 >>xiabanle

ad-hoc命令

  1. 命令工具常用选项
  2. Ssh密码认证
  3. Ssh 密钥对认证
    前面所使用的就是我们使用的ad-hoc命令的方式执行一个命令来使用我们的ansible
    这种的特点就是能够快速的执行某个操作,ad-hoc就是我们经常用的批量管理,而ploybook就是我们一个应用的编排

使用shell模块在主机组批量创建文件

[root@ansible ~]# ansible webservers -m shell -a "mkdir /opt/devops" [WARNING]: Consider using file module with state=directory rather than running mkdir10.4.7.21 | SUCCESS | rc=0 >>10.4.7.22 | SUCCESS | rc=0 >>[root@ansible ~]# ansible webservers -m shell -a "ls /opt/"10.4.7.22 | SUCCESS | rc=0 >>devopstest10.4.7.21 | SUCCESS | rc=0 >>devopstest

查看本次的操作设计到了哪些主机

[root@ansible ~]# ansible webservers --list-hosts  hosts (2):    10.4.7.2110.4.7.22

查看输出的命令遇到的详细信息
[root@ansible ~]# ansible webservers -vvv -a "ls /opt/devops"

Ssh密钥对的认证
先创建一对密钥对
[root@ansible ~]# ssh-keygen
这个rsa.pub是公钥,这个放在目标主机上,这个id_rsa是使用这个私钥进行登录认证的

[root@ansible .ssh]# lsid_rsa  id_rsa.pub  known_hosts

怎么放过去,有两种方式,第一种查看公钥的内容,将它复制到目标主机认证key中
还有一种方式就是通过ssh-copy-id,这样的话,就能直接传到目标主机的authorized_keys中
[root@ansible .ssh]# ssh-copy-id root@10.4.7.21
这个就是保存你ansible主机上的公钥

[root@aaa ~]# cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRgvupMdkSCz2tP1WOig7h736iqHdFMWVdMoYnmgpe8EUp/Xmuwf66dVv/RrDvs6jyPtlnlQtBVtEYJCwsuumgLXcSp+XwyICLe5cetYGYRa3ByhIiJPxrfkLCnLGHAHKl0dBnxN2286Rsg1D1NgRLFGVS+MF1Hj6CPgHhLc+eTusDv4tZXCFGdJoyT99jJCAwpc1N/pbJhoS/t4g+fxZ7nCrRkLS49i8Mo7KuLjtfwlB4yDbh2bzdG60rzF71k8asJlBj3GcSmtEhqmw7xyv2qcqCq/CvpscUhJ4ZIrz4xs6Jq2IKBhgQiptCnDis15b6Cj6R3mY3XLf4sruX/hyh root@ansible

这样就能实现免交互登录了
这样的话,hosts文件只需要将IP或者域名写上就可以了

Ansible的常用模块
执行shell命令(command和shell)
文件传输(copy和file)可以对文件拷贝和创建目录
管理软件包(yum)
用户和组(user)
从源代码管理系统部署(git)从git仓库拉取源代码
管理服务(service)
收集目标主机信息(setup)

Copy模块将文件拷贝过去

[root@ansible ~]# ansible webservers -m copy -a "src=/root/Dockerfile dest=/tmp"查看目标已有[root@ansible ~]# ansible webservers -a "ls /tmp"

File模块在管理端去创建文件
创建目录state=directory
创建文件state=touch
删除目录/文件state=absent
[root@ansible ~]# ansible webservers -m file -a "dest=/tmp/xiaoming state=file"

Yum模块在被管理端安装yum的包
Yum命令state=present
卸载命令 State=absent
[root@ansible ~]# ansible webservers -m yum -a "name=vim state=present"

User模块,创建用户
[root@ansible ~]# ansible webservers -m user -a "name=foo password=66666"
删除用户 :state=absent

Service模块我们启动一个服务停止一个服务,
测试一个memcache来测试服务的启动和停止
启动state=started
停止state=stopped
开机启动enabled=true
重启state=restarted

启动

[root@ansible ~]# ansible webservers -m yum -a "name=memcached state=present"[root@ansible ~]# ansible webservers -m service -a "name=memcached "[root@ansible ~]# ansible webservers -m shell -a "ps -ef |grep memcached"

停止
[root@ansible ~]# ansible webservers -m service -a "name=memcached state=stopped"
给memcached加入开机启动
[root@ansible ~]# ansible webservers -m service -a "name=memcached enabled=true"
重启就是restarted

Set up模块是收集系统信息的
这个也会写一些变量,当我们使用ploybook时当前的主机变量
[root@ansible ~]# ansible webservers -m setup
可以过滤其中的一些信息来过滤一些我们想要的系统信息,比如获得主机名

[root@ansible ~]# ansible webservers -m setup -a "filter=ansible_hostname"10.4.7.21 | SUCCESS => {    "ansible_facts": {        "ansible_hostname": "k8s-node1"    },     "changed": false}10.4.7.12 | SUCCESS => {    "ansible_facts": {        "ansible_hostname": "k8s-master"    },     "changed": false}10.4.7.22 | SUCCESS => {    "ansible_facts": {        "ansible_hostname": "k8s-node2"    },     "changed": false}

查看内存使用情况
[root@ansible ~]# ansible webservers -m setup -a "filter=ansible_*_mb"

主机 就是 管理 模块 配置 文件 服务 命令 应用 认证 信息 方式 功能 用户 变量 目标 密钥 清单 也就是 周期 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 小米移动互联网科技园 广州紫鲸互联网科技有限公司 腾讯阿里互联网科技 北京互联网科技有限公司 互联网科技公司发展 互联网科技公司电话 互联网金融科技委员会 青岛中康互联网医疗科技有限公司 天速互联网络科技有限公司 汽车互联网创新科技园 现代互联网科技股 岳阳华臻互联网科技有限公司 互联网科技革命什么开始 佛山市拉法互联网科技有限公司 世界互联网领先科技成果获奖 从那以后互联网科技有限公司 扫呗互联网科技有限公司 互联网科技接地气 银川新华互联网科技学校是国营吗 深圳市人人互联网科技有限公司 狮子座互联网科技 壹账通互联网科技 有木互联网科技 河南住房之家互联网科技 伍佰万互联网科技怎么赚钱 中国互联网有什么科技 四川互联网展示科技馆设计 张召忠谈中国互联网科技 中国新注册互联网科技
0