ansible(不能交互)

1定义

基于python开发的一个配置管理和应用部署工具,在自动化运维中异军突起,类似于xshell一键输入的工具,不需要每次都切换主机进行操作,只要有一台ansible的固定主机,就可以实现所有节点的操作。不需要agent客户端,只需要一台主机上配置ansible即可。ansible基于模块进行工作,只是提供一种运行架构,真正执行操作、变更的是asible的模块来实现的

2、作用

①远程操作主机功能

②自动化运维

③批量配置、部署、管理上千台主机

3、如何实现通信

asible默认通过ssh的密钥对实现通信(可以改)

4ansible的另一个特点

所有模块都是幂等性

幂等性:多次操作或多次执行对系统资源的影响是一致的

是幂等性

不是幂等性

http get

……

http post(多次执行相同的post可能会创建相同的资源)

……

systemctl stop firewalld

……

systemctl restart firewalld

……

只要发现要停止的目标服务已经停止了,后续同样的操作,不会改变任何结果,什么也不做

ansible的幂等性,决定了可以放心大胆使用,重复执行某个任务不会对结果产生任何影响(绝大多数情况下)

5ansible的四大组件

(1)inventory主机清单(主机组):定义ansible可以远程操作的服务器

(2)模块:13个常用的模块。通过模块实现远程配置和操作

(3)Plugins插件

(4)Playbook剧本(shell脚本):yaml格式

6、ansible的优点

(1)部署简单,只要在控制主机部署即可,被控制主机需要有ssh和python2.5以上版本,基本上linux都是自带的这两个条件

(2)ansible只能控制linux系统,windows系统不行

(3)基于模块工作,可以使用任意语言开发模块(二次开发底层架构)

安装ansible实验

主机名

作用

IP地址

服务

test1

管理端

20.0.0.10

ansible

test2

被管理端

20.0.0.20

/

test3

20.0.0.30

/

1、安装epel源、ansible、tree服务

ansible.cfg

ansible的主配置文件(一般不动)

hosts

主机组,声明可以被控制的主机

roles

公共角色目录(一般不用)

2、修改ansible配置文件

配置主机有两种方式:

①直接声明主机的IP地址(最常用)

②主机名(一定要在/etc/hosts中做映射)

3、生成密钥对

ssh-keygen -t rsa

4、把密钥对传给对应主机

被管理端同样如此

ansible安装完成

5、测试

ansible 20.0.0.20 -m command -a 'date'

tail -f /var/log/messages

①指定IP地址(只会在目标主机执行)

ansible 20.0.0.20 -m command -a 'ls /opt'

②指定执行组(组内所有声明的主机都会执行)

ansible dbservers -m command -a 'ls /opt'(dbservers是组名)

③所有声明的主机都会执行

ansible all -m command -a 'ls /opt'

ansible 20.0.0.20 -a 'ls /opt'

#不加-m也就是不声明使用的模块,默认是command模块

7、ansible的命令格式

ansible 组名/IP地址 -m 模块名称 -a ‘参数列表(执行命令)’ 

8ansible的13个模块

(1)模块1:command模块:默认模块。在远程主机执行linux命令,不支持管道符及重定向输出

command常用参数

chdir

在远程主机上运行命令,提前进入目录(先进入目录再执行命令)

creates

判断指定文件是否存在,若存在不执行后续操作

removes

判断指定文件是否存在,若存在执行后续操作

(2)模块2:shell模块:在远程主机执行命令,相当于调用远程主机的shell进程,支持管道符和重定向

实题1:创建用户并加密

测试:

实题2:过滤出IP地址

注意:在ansible中,多个引号要做隔离

&&表示逻辑且,前一个命令执行成功才会执行后一个命令

;表示逻辑或,前面成功与否,后面的命令都会执行

实题3:指定主机上创建一个脚本,在脚本中写入一个内容#!/bin/bash

ifconfig,然后运行这个脚本

ansible 20.0.0.20 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/jiaoben.sh ; sh /opt/jiaoben.sh'

-e 表示换行

实题4:两个数相加,运行脚本

ansible 20.0.0.20 -m shell -a 'echo -e "#!/bin/bash\na=$((2+3))\necho \$a" > /opt/jiaoben.sh ; sh /opt/jiaoben.sh'

(3)模块3:cron模块:远程给主机设置定时任务

两种状态:

①present表示添加(默认,可以省略)

②absent表示移除(absent在整个ansible语法中都表示移除)

minute

hour

day

month

weekday

job

任务执行的命令

name

任务计划的名称(可以不加)

实题1:创建定时任务,每隔5分钟执行ls /opt,任务名称test1

ansible 20.0.0.20 -m cron -a 'minute="*/5" job="ls /opt" name="test1"'

实题2:9月1号早上8点三十分,执行ls /opt,任务名称test3

ansible 20.0.0.20 -m cron -a 'minute="30" hour="8" day="1" month="9" job="ls /opt" name="test3"'

实题3:周三下午14:30分,执行ls /opt

ansible 20.0.0.20 -m cron -a 'minute="30" hour="14" weekday="*/3" job="ls /opt"'

实题4:删除定时任务

ansible 20.0.0.20 -m cron -a 'name=test1 state=absent'

ansible 20.0.0.20 -m cron -a 'name=None state=absent'

注意:多个计划任务,如果不指定名称,一旦删除None,多个None均删除,不建议使用,一定要指定任务名称

(4)模块4:user模块:用户管理模块

user模块常用参数

name

指定用户名(必须加)

state

=present创建用户(默认,可以不加)

=absent删除用户(必须加)

system

=yes用户是一个程序用户

n=o用户不是一个程序用户

uid

用户的唯一标识

group

用户所在组

create_home

=yes替换用户的家目录

=no不替换用户的家目录(可以不加)

password

创建用户的密码

comment

用户的注释信息(可有可无)

remove

=yes删除用户的家目录(相当于userdel -r)

不需要删除用户的家目录,可以不写

注:使用ansible的user模块创建用户时,若创建普通用户可以不加system=yes和shell类型,默认是/bin/bash;若创建程序用户,一定要声明system=yes和shell=/sbin/nologin,也可以指定uid方式,给用户分配一个uid

实题1:创建一个程序用户yyy

程序用户uid范围1-999

普通用户1000开始

注意:在创建用户时,虽然声明一个程序用户,但默认的登录shell没有额外声明,但还是默认的/bin/bash,uid还是会安装程序用户来指定

实题2:远程创建用户,指定uid,创建密码和家目录

实题3:修改用户的家目录

实题4:删除用户并删除其家目录

ansible 20.0.0.20 -m user -a 'name=ttt remove=yes state=absent'

测试

(5)模块5:group模块:用户组的管理模块

group常用参数

name

指定名称(必须加)

gid

设置组的id

实题1:创建用户添加到指定组中

ansible 20.0.0.20 -m user -a 'name=rrrrr uid=1011 group=ppp'

实题2:删除组(若组里有用户,先删除用户再删除组)

ansible 20.0.0.20 -m group -a 'name=ppp state=absent'

(6)模块6:ping模块:测试主机之间的连通性

ansible all -m ping

7模块7:hostname模块:指定远程主机的主机名

ansible 20.0.0.20 -m hostname -a 'name=yyy'

8模块8:copy模块:复制指定的主机文件到远程主机的模块(主机→远程主机)

copy模块常用参数

dest

(指目标)

指出要复制的文件位置(必须是绝对路径)。若是源目标是目录,指目标也须是目录,若目标的文件存在,会覆盖原有的内容

src

(源目标)

复制文件的源(必须是绝对路径),源目标是目录,指目标也须是目录(复制的目录不能为空)

owner

指定文件的所有者

group

指定文件的所在组

content

从主机复制指定的内容到目标主机(content和src冲突)

mode

指定复制之后的文件的权限

ansible 20.0.0.20 -m copy -a 'src=/opt/123 dest=/opt/123.txt owner=yst mode=655'

ansible 20.0.0.20 -m copy -a 'content="hello world" dest=/opt/hello.txt'

实题1:在目标主机创建一个用户叫guoqi,system=yes,shell=/sbin/nologin,复制文件ky32.txt,ky32.txt,所有者和所在组都是guoqi,权限是600

ansible 20.0.0.20 -m user -a 'name=guoqi system=yes shell=/sbin/nologin'

ansible 20.0.0.20 -m copy -a 'src=/opt/ky32.txt dest=/opt/ky32.txt owner=guoqi group=guoqi mode=600'

实题2:复制目录guoqi,目标叫guoqi1,权限mode777

9模块9:file模块:管理文件属性(与目录无关)

file模块常用参数

owner

指定文件的所有者

group

指定文件的所在组

mode

指定复制之后的文件的权限

state

=link创建连接文件

=touch创建文件

=absent删除文件

远程创建文件

ansible 20.0.0.30 -m file -a 'path=/opt/test.txt state=touch'

创建连接文件

远程删除文件

实题1:file模块创建一个文件,ky32.txt,所有者和所在组guoqi,权限700

ansible 20.0.0.20 -m file -a 'state=touch path=/opt/ky32.txt group=guoqi owner=guoqi mode=700'

实题2:给/etc/fstab创建一个软连接,这个文件是目标主机/opt/fstab.bak复制过来的文件,这个复制文件/opt/fstab.bak在目标主机的/opt下,创建一个新的文件fstab.link作为fstab.bak的软连接

ansible 20.0.0.20 -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak'

ansible 20.0.0.20 -m file -a 'state=link path=/opt/fstab.link src=/opt/fstab.bak'

(10)模块10:yum模块:在远程主机上安装和卸载软件包(在目标主机上的操作都是后台运行,不影响其他用户的使用)

①安装ansible 20.0.0.20 -m yum -a 'name=tree'

②卸载ansible 20.0.0.20 -m yum -a 'name=tree state=absent'

实题:查询远程主机httpd的状态,开启,访问this is httpd

(11)模块11:service/systemd模块

service/systemd模块常用参数

name

设定管理服务的名称

state

=started开启

=stopped停止

=restarted重启

enabled

=true开机自启

不设置表示开机不自启

runlevel

配合enabled,若是开机自启,可以设置运行级别(在命令行可以设置但不生效,必须在playbook中声明)

ansible 20.0.0.20 -m service -a 'enabled=true name=httpd state=restarted'

实题:在目标主机安装nginx,设置为开机自启,设置访问页面this is nginx

安装epel源

ansible 20.0.0.30 -m service -a 'name=epel-release'

安装nginx

ansible 20.0.0.30 -m yum -a 'name=nginx'

开机自启

ansible 20.0.0.30 -m service -a 'state=started name=nginx enabled=true'

查看nginx状态

ansible 20.0.0.30 -a 'systemctl status nginx'

设置访问页面

ansible 20.0.0.30 -m shell -a 'echo "this is nginx"> /usr/share/nginx/html/index.html'

访问nginx页面

ansible 20.0.0.30 -a 'curl 20.0.0.30'

(12)模块12:script模块:运行本地脚本,结果输出到目标主机

实题:写一个shell脚本,内容:touch 123 echo “郭琪真帅” >123,所有主机都能执行

(13)模块13:setup模块:查看目标主机的系统信息(facts)

filter来设置过滤条件

ansible 20.0.0.20 -m setup

查看IP地址ansible all -m setup -a 'filter=*ipv4'

查看系统时间ansible all -m setup -a 'filter=ansible_date_time'

查看内存ansible all -m setup -a 'filter=*memory*'

查看内核ansible all -m setup -a 'filter=*proc*'

查看系统ansible all -m setup -a 'filter=*os*'

查看系统信息ansible all -m setup -a 'filter=*system*'

查看硬盘ansible all -m setup -a 'filter=*dev*'

9、主机清单

主机清单管理组中的的变量名

ansible_host

连接时的IP地址

ansible_port

声明对方的连接端口,默认是ssh的22端口

ansible_user

指定连接时使用对方主机的用户名。不指定主机执行ansible的用户即为使用目标主机的用户名

ansible_password

指定连接ssh时的密码(目标主机的用户密码)

ansible_become

提升用户权限

ansible_become root

ansible_become_password

指定切换用户的密码(免密钥登录)

(1)免密连接

20.0.0.2[2:9]声明范围,[a:f]声明主机名(声明主机名时要在/etc/hosts中做映射)

取消密钥对认证

修改配置文件

①免密连接单个主机

②免密连接多个主机

[all:vars]不能随意起,有些没效

(2)组嵌套

实题:写一个编译安装nginx的脚本,在所有主机都生效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/257373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

头部首发优志愿头部u_sign生成与TLS指纹处理! + 数据可视化技术讲解【Python爬虫】

目录 针对大学名称 大学排名, 综合指数,学校情况等数据进行爬取 找对应得数据包 请求发现数据有加密 发现加密参数 搜索加密参数,好进行分析 分析过程 数据可视化 针对大学名称 大学排名, 综合指数,学校情况等数据进行爬取 首先进行鼠标右键,进行…

C语言数据结构-排序

文章目录 1 排序的概念及运用1.1 排序的概念1.2 排序的应用 2 插入排序2.1 直接插入排序2.2 希尔排序2.3 直接排序和希尔排序对比 3 选择排序3.1 堆排序3.2 直接选择排序 4 交换排序4.1 冒泡排序4.2 快速排序4.2.1 挖坑法14.2.2 挖坑法24.2.3 挖坑法3 5 并归排序6 十万级别数据…

解释常用的性能指标名称与具体含义

是通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优化。 性能指标分为两个方面: 系统指标:与用户场景和需求相关指标&#xf…

100GPTS计划-AI写作VersatileWriter

地址 https://chat.openai.com/g/g-zHErU9z9m-versatile-writer https://poe.com/VersatileWriterGPT 测试 翻译:要求将给定的英语语句翻译成中文。 总结:给出一段文本,要求进行概括和总结。 问答:根据给定段落,提出相关问题并给出答案。 推理:给出前提,进行多步推理并得…

20 个超棒的开源应用程序项目

这些项目几乎可以立即安装和使用,涉及各种编程语言:Python、Rust、JavaScript等等。 1,Portmaster Portmaster是由 Safing 开发一款开源软件,使用Go语音进行编写,能帮你保护在线隐私,确保个人信息安全。它不仅可以监视所有网络活动,还能自动屏蔽跟踪器、保护 DNS 请求…

勒索病毒最新变种.360、.halo勒索病毒来袭,如何恢复受感染的数据?

引言: 网络安全成为企业和个人不可忽视的重要议题。最近,.360、.halo勒索病毒作为一种新兴的威胁,引起了广泛关注。本文将深入介绍.360、.halo勒索病毒的特点,并提供针对感染的数据文件的恢复方法,同时分享有效的预防…

SpringBoot配置mysql加密之Druid方式

一、导入Druid依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version> </dependency>二、生成密文 方式1. 找到存放druid jar包的目录 1-1、在目录…

jdk 线程池与 tomcat 线程池对比

一、线程池的作用 1. 提高性能&#xff1a;线程的创建需要开辟虚拟机栈、本地方法栈、程序计数器等线程私有空间&#xff0c;同时也会一比一的创建一个内核线程&#xff0c;在线程销毁时需要回收这些系统资源。频繁地创建和销毁线程会大大浪费系统资源&#xff0c;这时候就需要…

进制间通讯 消息队列

实现AB进程对话。 a. A进程发送一句话后&#xff0c;B进程接收到打印。然后B进程发送一句话&#xff0c; A进程接收后打印 b.重复上述步骤。直到AB接收或者发送完quit后,结束AB进程

【漏洞复现】CVE-2023-6848 kodbox远程命令执行

漏洞描述 kodbox 是一个网络文件管理器。它也是一个网页代码编辑器,允许您直接在网页浏览器中开发网站。您可以在基于 Linux、Windows 或 Mac 的平台上在线或本地运行 kodbox。唯一的要求是要有 PHP 5及以上。 kalcaddle kodbox 中发现漏洞,最高版本为 1.48。它已被宣布为关…

记录下系统异常到数据库中,方便查找定位,省去翻日志的麻烦。

将异常消息&#xff0c;产生时间&#xff0c;帧信息&#xff0c;操作信息等存入表中&#xff0c;方便查阅修改。适合小系统。大系统没试过。 在异常通知对象HandlerExceptionResolver解析完异常后&#xff0c;构建一个异常相关信息实体。存入表中。代码如下&#xff1a; publ…

[23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians

[paper | proj] 给定FLAME&#xff0c;基于每个三角面片中心初始化一个3D Gaussian&#xff08;3DGS&#xff09;&#xff1b;当FLAME mesh被驱动时&#xff0c;3DGS根据它的父亲三角面片&#xff0c;做平移、旋转和缩放变化&#xff1b;3DGS可以视作mesh上的辐射场&#xff1…

英文表示数字_分支结构 C语言xdoj146

题目描述&#xff1a;输入一个0~9的一位整数&#xff0c;输出其对应的英文单词。要求用switch结构完成。 示例&#xff1a; 输入&#xff1a;0 输出&#xff1a;zero 输入&#xff1a;8 输出&#xff1a;eight #include <stdio.h>//英文表示数字_分支结构 int main() {in…

一招教你如何绕过OpenAI API key创建时需要手机号验证

一招教你如何绕过OpenAI API key创建时需要手机号验证 虽然现在 ChatGPT 注册门槛极大地降低。但是&#xff0c;如果你是开发者或者需要第三方应用接入ChatGPT&#xff0c;此时就需要获取一个 API key&#xff0c;然而你可能会发现在你在创建 key 的过程中需要进行手机号验证。…

【unity小技巧】使用三种方式实现瞄准瞄具放大变焦效果

最终效果对比 文章目录 最终效果对比前言第一种办法方法二1. 创建URP环境2. 配置 Universal Render Pipeline Asset3. 这里向我们新建一个无光的ShaderGraph4. 主图配置4. 新建材质&#xff0c;挂载5. 下面是shaderGraph 的连线图6. 新增脚本控制ObjectScreenPosition随着瞄准镜…

org.slf4j日志组件实现日志功能

slf4j 全称是Simple Logging Facade for Java。facade是一种设计模式。 slf4j 是一个抽象程度更高的日志组件&#xff0c;本身并不提供实际的日志功能。实际的日志功能是通过log4j等日志组件实现&#xff0c;而使用者只需要关心 slf4j 给出的API。 slf4j 仅仅是一个为Java程序提…

bootstap table表格, 获取当前点击的table元素在该行是第几个

背景 有这样一个需求, table表格中是统计数据, 要求点击每个单元格可实现导出统计的底层数据 数据都是可点击导出的, 思路 获取行bootstap 有个index参数, 所哟要获取当前行第几列, 要获取当前点击的table元素在其所在行中的位置&#xff08;即第几个&#xff09;&#xff…

《每天一分钟学习C语言·二》

1、当使用const关键字变量就无法修改可当常量来用。常量指针不能通过指针来改变变量的值&#xff0c;但可以通过其他引用来改变变量的值常量指针也可以指向其他变量地址&#xff0c;如 int a5,b6; const int *pt &a; *pt6; //错误 a6; //正确 pt&b; //正确指针常量指…

0057-基本数据类型和 String 类型的转换

文章目录 基本数据类型和 String 类型的转换注意事项 基本数据类型和 String 类型的转换 注意事项

Oracle的学习心得和知识总结(三十)| OLTP 应用程序的合成工作负载生成器Lauca论文翻译及学习

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…