0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是Ansible

汽车电子技术 来源: 码农与软件时代 作者: 码农与软件时代 2023-02-15 14:06 次阅读

Ansible是一种运维自动化工具软件,用来批量配置服务器或网络设备(目标主机)。

一、概念理解

  1. Ansible如何来连接目标主机?

通过SSH协议进行连接,详细参考:SSH协议

  1. 目标主机为何能相信Ansible,并接受其指令?

(1)Ansible知道目标主机密码,并通过密码访问。

Ansible将密码配置在以明文的形式配置在文件(也就是hosts文件),存在安全性问题。

(2)Ansible主机生成密钥对,并将公钥拷贝到目标主机。

通过ssh-copy-id命令进行拷贝,并修改~/.ssh的目录权限。如:

ssh-copy-id -i /root/.ssh/id_rsa.pub root@30.0.1.43

当目标主机较多时,这种方法也比较受限。

(3)Ansible自动化安装配置工具

Redhat下,通过Kickstart工具进行,可进行大批量的认证

  1. Ansible如何知道需要连接哪些目标主机?

目标主机列表定义在/etc/ansible/hosts文件,称为 "inventory" 。定义格式为:

[webservers]
  30.0.1.234
  30.0.1.154
  1. 目标主机上都有哪些事情需要做?

运维过程中,需要做的事情很多,如:

(1)基础命令,如ls;

(2)定时任务,如crontab

(3)启停服务,如service ngnix restart

(4)包管理,如apt install ansible

......

  1. Ansible如何知道做这些事(任务)的?

运维人员通过两种方式来告知Ansible做事:

一种是我们熟悉的命令行方式,类似ansible webserver -m ping,称之**“Ad-Hoc命令”**;

一种是通过YAML语法定义要执行的命令,称为 “Playbook” 方式。

  1. Ansible又是如何具备做这些事的能力的?

Ansible通过 “Module” 来实现,如command、shell、copy等等。

  1. 运维人员如何知道Ansible提供了哪些Module?

查找Ansible提供的模块

root@linux:/etc/ansible# ansible-doc -l
a10_server                                           Manage A10 Networks AX/SoftAX/Thunder/vThunder devices' server object.                           
a10_server_axapi3                                    Manage A10 Networks AX/SoftAX/Thunder/vThunder devices                                           
......

模块的详细信息

root@linux:/etc/ansible# ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return `pong' on success
  ping:
      data:                  # Data to return for the `ping' return value. If this parameter is set to `crash' the 
module will cause an exception.
  1. 如何读懂PlayBook?

(1)了解YAML

PlayBook是通过YAML语法来实现的,详情参考:《Yaml:数据的另一种形态》

(2)清楚PlayBook有哪些关键字,如何来的?

---                      #文件开始
 - hosts: 30.0.1.43       #目标主机
  remote_user: root       #目标主机用户
  vars:                   #变量关键字
    http_port: 8088       #定义变量




  tasks:                             #任务关键字
    - name: create new file                     #自定义任务
      file: name=/tmp/playtest.txt state=touch  #Module file,创建新文件
    .......
  handlers:                                     #处理关键字
    - name: restart apache                      #自定义处理名称
      service: name=httpd state=restarted       #重启服务

说明:file、service都是module名字。

二、Ansible小示例

基础环境:Ubuntu18.04 LTS

  1. 安装ansible软件
root@linux:/# apt install ansible
......
root@linux:/# apt install sshpass

查看ansible版本信息:

root@linux:/etc/ansible# ansible --version
ansible 2.5.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Sep 30 2020, 13:38:04) [GCC 7.5.0]

已生成ansible.cfg、hosts文件

root@linux:/etc/ansible# ls
ansible.cfg  hosts
  1. Ansible连通目标主机

(1)目标主机有两台,IP地址分别为:30.0.1.234、30.0.1.154

(2)配置hosts文件

root@linux:/etc/ansible# vi hosts   
[webservers]
30.0.1.234
30.0.1.154

(3)执行ping操作,测试连接

root@linux:~# ansible webservers -m ping
The authenticity of host '30.0.1.154 (30.0.1.154)' can't be established.
ECDSA key fingerprint is SHA256:THHVZ1IfwqJk0YpV7Qk/a+ZvMds4phRQJEbrJIJFagg.
Are you sure you want to continue connecting (yes/no)? The authenticity of host '30.0.1.234 (30.0.1.234)' can't be established.
ECDSA key fingerprint is SHA256:THHVZ1IfwqJk0YpV7Qk/a+ZvMds4phRQJEbrJIJFagg.
Are you sure you want to continue connecting (yes/no)? yes
30.0.1.154 | UNREACHABLE! => {
"changed": false, 
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '30.0.1.154' (ECDSA) to the list of known hosts.\\r\\nroot@30.0.1.154: Permission denied (publickey,password).\\r\\n", 
"unreachable": true
}
30.0.1.234 | UNREACHABLE! => {
"changed": false, 
"msg": "Failed to connect to the host via ssh: Host key verification failed.\\r\\n", 
"unreachable": true
}

连接失败

(4)修改ansible.cfg配置文件,不进行host_key的校验

root@linux:~# vi /etc/ansible/ansible.cfg 
# uncomment this to disable SSH key host checking
host_key_checking = False
root@linux:/etc/ansible# ansible webservers -m ping
30.0.1.154 | UNREACHABLE! => {
"changed": false, 
"msg": "Failed to connect to the host via ssh: root@30.0.1.154: Permission denied (publickey,password).\\r\\n", 
"unreachable": true
}
30.0.1.234 | UNREACHABLE! => {
"changed": false, 
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '30.0.1.234' (ECDSA) to the list of known hosts.\\r\\nroot@30.0.1.234: Permission denied (publickey,password).\\r\\n", 
"unreachable": true
}

依然无法连接到目标主机,root用户不允许进行远程登录

(5)修改hosts文件

root@linux:/etc/ansible# vi hosts 
[webservers]
30.0.1.234
30.0.1.154




[webservers:vars]
ansible_ssh_user=linux
ansible_ssh_pass=user@linux
ansible_become=true
ansible_become_method=su
ansible_become_user=root
ansible_become_pass=root@linux

上面配置语句的含义为:以linux用户登录,然后再提高权限,切换到root用户。

(6)再次测试,连接成功

root@linux:/etc/ansible# ansible webservers -m ping
30.0.1.234 | SUCCESS => {
"changed": false, 
"ping": "pong"
}
30.0.1.154 | SUCCESS => {
"changed": false, 
"ping": "pong"
}

"pong" 表示ping成功,连接成功

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8120

    浏览量

    82530
  • 自动化
    +关注

    关注

    28

    文章

    5039

    浏览量

    77733
  • 网络设备
    +关注

    关注

    0

    文章

    266

    浏览量

    29353
  • 工具软件
    +关注

    关注

    1

    文章

    14

    浏览量

    6876
收藏 人收藏

    评论

    相关推荐

    Ansible软件平台

    Ansible 是一个免费的用于配置和管理计算机的的软件平台。它集成了软件部署,ad hoc任务执行,和管理配置的功能。它依赖Python2.4之后的版本和通过SSH或者PowerShell管理节点
    发表于 07-18 08:24

    ansible核心程序批量部署

    ansible批量部署
    发表于 07-26 15:30

    ansible调用playbook远程mvn显示找不到JAVA_HOME

    ansible 】关于ansible远程执行的环境变量问题
    发表于 11-06 09:26

    ansible的工作原理和安装

    ansible安装(一)
    发表于 03-25 11:19

    ansible playbook+jenkins如何实现自动新增域名

    ansible-playbook+jenkins实现自动新增域名
    发表于 06-03 11:58

    ansible 某台机器的ssh端口不是默认端口,如何解决?

    现象:ansible 某台机器的ssh端口不是默认端口
    发表于 11-06 06:56

    ansible-first-book 自动化运维工具

    ansible-first-book 自动化运维工具
    发表于 09-08 09:31 5次下载

    使用用Ansible重复部署ELK STACK

    本文介绍如何使用Ansible 剧本在远程服务器上设置ELK(5.x版本)进行开发。它将带你完成安装Ansible的步骤,连接到目标服务器,执行该剧本,并建立初始的日志流水线。 让我们开始吧! 1.
    发表于 09-28 14:50 0次下载
    使用用<b class='flag-5'>Ansible</b>重复部署ELK STACK

    Ansible到底是个什么东西?

    Ansible 是一个配置管理和应用部署工具,即在管理主机上操作一些命令就能在节点主机上进行相应的动作。由 Python 编写,由模块化组成,即执行动作的实体,在 ansible 上都是靠着相应
    的头像 发表于 04-08 14:47 2.1w次阅读
    <b class='flag-5'>Ansible</b>到底是个什么东西?

    Ansible入门教程如何快速了解Ansible

    顶级大牛带你20分钟玩转Ansible
    的头像 发表于 05-12 11:49 4899次阅读

    一文详解Ansible的自动化运维

    CMDB:CMDB 存储和管理者企业IT架构中的各项配置信息,是构建 ITIL 项目的核心工具,运维人员可以组合 CMDB 和 Ansible,通过 CMDB 直接下发指令调用Ansible 工具集完成操作者所希望达到的目标;
    的头像 发表于 05-19 17:06 4090次阅读
    一文详解<b class='flag-5'>Ansible</b>的自动化运维

    Ansible Container容器自动化构建部署工具

    ./oschina_soft/ansible-container.zip
    发表于 05-11 10:15 1次下载
    <b class='flag-5'>Ansible</b> Container容器自动化构建部署工具

    使用Ansible的OpenStack自动化

    通过将 Ansible Tower 与 OpenStack 集成到 Cyber Range 软件中,我们能够构建一个应用程序,为全球客户提供按需培训和真实场景。将 Ansible REST API 与行动手册集成,极大地利用了配置到更系统化的自动化流程所需的许多代码。我们
    的头像 发表于 12-21 14:12 831次阅读
    使用<b class='flag-5'>Ansible</b>的OpenStack自动化

    为什么需要用Ansible管理crontab呢?

    Ansible 是使用 Python 开发的自动化运维工具。它可以配置管理,部署软件并编排更高级的任务,例如持续部署或零停机滚动升级。
    的头像 发表于 08-17 09:53 409次阅读

    利用Ansible批量100台服务器添加Crontab

    今天浩道跟大家分享关于Ansible自动化运维相关硬核干货,利用Ansible批量100台服务器添加Crontab !
    的头像 发表于 08-19 14:24 362次阅读