Ansible自动化运维Inventory与Ad-Hoc

news/2024/5/25 10:51:59/文章来源:https://blog.csdn.net/qq_64612585/article/details/136666138

前言

自动化运维是指利用自动化工具和技术来简化、自动化和优化IT基础设施的管理和运维过程,从而提高效率、降低成本,并减少人为错误。在当今复杂的IT环境中,自动化运维已经成为许多组织和企业提高生产力和保证系统稳定性的重要手段。Ansible作为一种自动化运维工具,在这样的背景下应运而生,它通过简单、灵活的方式实现了IT基础设施的自动化管理。

目录

前言

一、Ansible 介绍

1. 概述

2. 组成

3. 工作原理

4. 特性

二、Install 部署

1. 环境准备

2. 安装 ansible

3. 相关文件

4. ansible 主配置文件

5. 免密管理 ssh-keygen

三、Ansible基础 

1. 定义主机清单

2. 测试连通性

3. 简洁输出

4. know_hosts

5. ping和ssh

四、Inventory 主机清单

1. 简介

2. 增加主机组

3. 增加用户名密码

4. 增加端口

5. 组:变量

6. 子分组

7. 自定义主机列表

五、Ad-Hoc 点对点模式

1. 简介

2. 模块

2.1 command 模块

2.2 shell 模块

2.3 script 模块

2.4 copy 模块

2.5 get_url 模块 

2.6 fetch 模块

2.7 file 模块

2.8 stat 模块

2.9 unarchive 模块

2.10 archive 模块

2.11 hostname 模块

2.12 cron 模块

2.13 yum 和 apt 模块  

2.14 yum_repository 模块

2.15 service 模块

2.16 mount 挂载和卸载

2.17 user 模块

2.18 group 模块

2.19 reboot模块

2.20 lineinfile 模块

2.21 replace 模

2.22 setup 模块


一、Ansible 介绍

1. 概述

Ansible基于Python开发,结合了众多运维工具的优点,最终实现批量系统配置、批量程序部署以及批量运行命令等功能。

2. 组成

  • INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts 需要管理的服务清单
  • MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
  • PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
  • API:供第三方程序调用的应用程序编程接口

3. 工作原理

Ansible基于模块化工作,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块(Modules)。Ansible只是提供了一种框架,在Ansible管理体系中,存在着管理节点Control Node)和被管理节点(Managed Node)两种角色。被管理节点通常称之为资产,会放在主机清单(Inventory)文件中,Inventory其实就是由Ansible所管理的主机形成的。在管理节点上,Ansible将Ad-Hoc(批量执行单条命令,即单模块)或者Playbook(任务剧本)转化为Python脚本,最终通过ssh网络协议将这些Python脚本传递到被管理节点,在被管理服务器上依次执行,并且会实时将结果返回给管理节点。返回结果顺序根据网络、被管理服务器本身性能等因素有关。

① 管理节点(Control Node):在控制节点上安装Ansible,并使用Ansible的命令行工具或者其他接口来编写和执行自动化任务。

② 主机清单(Inventory):控制节点上维护一个主机清单文件,列出了需要管理的目标主机的信息,包括IP地址、主机名等。

③ 任务剧本(Playbook):Playbook通常是josn格式的YAML文件,定义了一系列任务和配置信息,用于描述自动化任务的执行流程。Playbook编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,相当于多个Ad-Hoc的配置文件。

④ 单模块(AD-Hoc):指的是在不使用Playbook的情况下,直接使用ansible命令行工具执行临时命令。这些命令通常是一次性的、针对特定任务的,而不需要编写长期维护的Playbook。通过AD-Hoc命令,可以快速地在远程主机上执行特定的任务,比如文件操作、软件安装、服务管理等。

⑤ 执行任务模块(Modules): Ansible提供了丰富的模块,用于执行各种管理任务,比如文件操作、软件包管理、服务管理等。

⑥ Python:在Ansible中,默认情况下,Ansible会利用目标主机上已安装的Python解释器来执行远程命令。Ansible的核心引擎和大部分模块都是基于Python编写的,因此要求目标主机上必须安装有Python(通常是2.6版本或以上)才能正常运行Ansible管理任务。

⑦ SSH连接:Ansible使用SSH协议来连接目标主机,并在目标主机上执行任务。

⑧ 被管理节点(Managed Node):是指由Ansible进行配置、管理和自动化操作的远程主机或设备。这些被管理节点是Ansible控制节点所管理的目标系统,可以是服务器、虚拟机、网络设备或其他类型的计算设备。 

4. 特性

① 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块(账号,软件等)

② Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块

③ 基于Python语言实现

④ 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)

⑤ 安全,基于OpenSSH

⑥ 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对

⑦ 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构

⑧ 较强大的多层解决方案 role

二、Install 部署

1. 环境准备

① 设备准备(均关闭防火墙、核心防护)

ansible服务器:192.168.190.100

ansible客户机:192.168.190.101、192.168.190.102、192.168.190.103、192.168.190.104

② ansible服务器添加域名解析,客户机无需配置

[root@localhost ~]# vim /etc/hosts
192.168.190.100 ansible
192.168.190.101 host1
192.168.190.102 host2
192.168.190.103 host3
192.168.190.104 host4

2. 安装 ansible

① 配置阿里云yum源,本机已存在可以忽略

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak;mv *.repo bak
[root@localhost yum.repos.d]# vim CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=0
enabled=1[updates]
name=CentOS-$releasever - Updates - aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=0
enabled=1[extras]
name=CentOS-$releasever - Extras - aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=0
enabled=1[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7[root@localhost yum.repos.d]# ls
bak  CentOS-Base.repo
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache

② Install安装

[root@localhost ~]# yum install ansible -y
已安装:ansible.noarch 0:2.9.27-1.el7                                                                                  作为依赖被安装:PyYAML.x86_64 0:3.10-11.el7                             libyaml.x86_64 0:0.1.4-11.el7_0                       python-babel.noarch 0:0.9.6-8.el7                       python-jinja2.noarch 0:2.7.2-4.el7                    python-markupsafe.x86_64 0:0.11-10.el7                  python-paramiko.noarch 0:2.1.1-9.el7                  python2-httplib2.noarch 0:0.18.1-3.el7                  python2-jmespath.noarch 0:0.9.4-2.el7                 sshpass.x86_64 0:1.06-2.el7 [root@localhost ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts

③ 查看基本信息

[root@localhost ~]# ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]

3. 相关文件

  • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件
  • /etc/ansible/hosts 主机清单
  • /etc/ansible/roles/ 存放角色的目录

4. ansible 主配置文件

Ansible 的默认配置文件路径:/etc/ansible/ansible.cfg

[defaults]
#inventory     = /etc/ansible/hosts 	#主机列表配置文件
#library = /usr/share/my_modules/ 		#库文件存放目录
#remote_tmp = $HOME/.ansible/tmp 		#临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp 	#本机的临时命令执行目录
#forks         = 5   					#默认并发数
#sudo_user     = root 					#默认sudo 用户
#ask_sudo_pass = True 					#每次执行ansible命令是否询问ssh密码
#ask_pass      = True                   #当连接到远程主机时,会提示用户输入SSH密码
#remote_port   = 22                     #连接到远程主机时所使用的SSH端口号。默认为22。
#host_key_checking = False     			#检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log 			#日志文件,建议启用
#module_name = command   				#默认模块,可以修改为shell模块
[privilege_escalation] 					#普通用户提权配置
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

5. 免密管理 ssh-keygen

用于生成SSH密钥对的命令行工具。它通常用于创建公钥和私钥,以便进行安全的SSH通信。

[root@localhost ~]# ssh-keygen   #一直按回车
[root@localhost ~]# ls .ssh/
id_rsa  id_rsa.pub
[root@localhost ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.190.101 #推送公钥给host1[root@localhost ~]# ssh root@192.168.190.101
Last login: Wed Mar 13 14:04:13 2024 from 192.168.190.1
[root@localhost ~]# ifconfig ens33 | grep netmask | awk "{print \$2}"
192.168.190.101

三、Ansible基础 

1. 定义主机清单

[root@localhost ~]# vim /etc/ansible/hosts
host1
host2
host3
host4

2. 测试连通性

① 测试本机

[root@localhost ~]# ansible localhost -m ping
localhost | SUCCESS => {                        #绿色字体"changed": false, "ping": "pong"
}

② 分别测试host1和host2,此时host1做了免密登录,观察返回信息

[root@localhost ~]# ansible host1 -m ping
Are you sure you want to continue connecting (yes/no)? yes
host1 | SUCCESS => {                                        #绿色字体"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@localhost ~]# ansible host2 -m ping
Are you sure you want to continue connecting (yes/no)? yes
host2 | UNREACHABLE! => {                                   #红色字体"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added 'host2,192.168.190.102' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true
}

3. 简洁输出

[root@localhost ~]# ansible host1 -m ping -o
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#绿色字体

4. know_hosts

[root@localhost ~]# ansible host2 -m ping -o -u root -k  #指定用户交互式ssh登录
SSH password: 
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#绿色字体

关闭ssh询问

方法一:修改sshd配置,StrictHostKeyChecking no

[root@localhost ~]# vim /etc/ssh/ssh_config35 #   StrictHostKeyChecking ask36     StrictHostKeyChecking no
[root@localhost ~]# systemctl restart sshd

 方法二:修改ansible配置,启用host_key_checking = False

[root@localhost ~]# vim /etc/ansible/ansible.cfg
71 host_key_checking = False

5. ping和ssh

Ping 是一种基于 ICMP(Internet Control Message Protocol)的网络工具,通常用于测试两台计算机之间的连接和延迟。通过发送 ICMP 回显请求消息到目标主机并等待其回应,可以确定目标主机是否可达以及网络延迟情况。

SSH(Secure Shell)是一种加密的网络协议,用于安全地远程连接到另一台计算机,并在该计算机上执行命令。SSH 提供了加密的通信渠道,使得数据传输过程中更加安全,并且还允许用户进行身份验证,确保只有授权用户能够访问远程计算机。

区别:
协议类型:

  • Ping 使用 ICMP 协议,用于检测主机之间的连通性。
  • SSH 使用安全的加密通信协议,用于远程登录和执行命令。

功能:

  • Ping 用于测试主机之间的连通性和延迟。
  • SSH 用于建立安全的远程连接,允许用户登录并在远程主机上执行命令。

安全性:

  • Ping 不提供加密或身份验证,仅用于测试连接。
  • SSH 提供加密通信和身份验证,确保通信的安全性和用户身份的合法性

四、Inventory 主机清单

1. 简介

Inventory 主机清单是 Ansible 的一个重要概念,它用于定义 Ansible 将要管理的主机、服务器或设备。这个清单可以包含主机名、IP 地址、主机组以及其他相关的信息。

2. 增加主机组

[root@localhost ~]# vim /etc/ansible/hosts
[webserver]          #下方主机将被分配到webserver组中
host1
host2
host3
host4[root@localhost ~]# ansible webserver -m ping -o
host3 | UNREACHABLE!: Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
host2 | UNREACHABLE!: Failed to connect to the host via ssh: Warning: Permanently added 'host2,192.168.190.102' (ECDSA) to the list of known hosts.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
host4 | UNREACHABLE!: Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#由此可见webserver已经生效被调用,只有host1做了免密登录,返回结果可以忽略

3. 增加用户名密码

[root@localhost ~]# vim /etc/ansible/hosts 
[webserver]
host[1:4] ansible_ssh_user='root' ansible_ssh_pass='123'
[root@localhost ~]# ansible webserver -m ping -o
host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#此时可以看到返回结果全部成功,且字体均为绿色;即使host1配置过免密,不冲突

4. 增加端口

① 修改host4 ssh协议端口号

[root@localhost ~]# vim /etc/ssh/sshd_config17 #Port 2218  Port 9527
[root@localhost ~]# systemctl restart sshd

② 测试ansible通信

[root@localhost ~]# ansible webserver -m ping -o
host4 | UNREACHABLE!: Failed to connect to the host via ssh: ssh: connect to host host4 port 22: Connection refused
host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#此时host4无法通信,提示端口故障

 ③ 修改服务器Inventory主机清单配置,再次访问

[root@localhost ~]# vim /etc/ansible/hosts
[webserver]
host[1:3] ansible_ssh_user='root' ansible_ssh_pass='123'
host4     ansible_ssh_user='root' ansible_ssh_pass='123' ansible_ssh_port='9527'[root@localhost ~]# ansible webserver -m ping -o
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#可见全部成功

5. 组:变量

当一个组中需要大量定义变量,可以统一定义。定义完成后,改组的所有成员都将收到、适应这个变量。

[root@localhost ~]# vim /etc/ansible/hosts
[webserver]
host[1:3]
host4     ansible_ssh_port='9527'[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123'[root@localhost ~]# ansible webserver -m ping -o
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#全部返回成功

常用变量:

参数用途示例
ansible_ssh_host定义 hosts ssh 地址ansible_ssh_host=192.168.190.100
ansible_ssh_port定义 hosts ssh 端口ansible_ssh_port=9527
ansible_ssh_user定义 hosts ssh 认证用户ansible_ssh_user=root
ansible_ssh_pass定义 hosts ssh 认证密码ansible_ssh_pass=123
ansible_sudo定义 hosts sudo 用户ansible_sudo=zhangsan
ansible_sudo_pass定义 hosts sudo 密码ansible_sudo pass=123
ansible_sudo_exe定义 hosts sudo 路径ansible_sudo_exe=/usr/bin/sudo
ansible_connection定义 hosts 连接方式ansible_connection=local
ansible_ssh_private_ key_file定义 hosts 私钥ansible_ssh_private_key_file=/root/key
ansible_ssh_shell_ type定义 hosts shell 类型ansible_ssh_shell_type=bash
ansible_python_interpreter定义 hosts 任务执行python路径ansible_python_ interpreter=/usr/bin/python2.6
ansible_*_interpreter定义 hosts 其它语言解析路径ansible_*_interpreter=/usr/bin/ruby

6. 子分组

将不同的分组进行组合

[root@localhost ~]# vim /etc/ansible/hosts
[apache]
host[1:2][nginx]
host3
host4     ansible_ssh_port='9527'[webserver:children]
apache
nginx[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123'[root@localhost ~]# ansible webserver -m ping -o
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#可见webserver这个总组调用了apache和nginx这两个从组

7. 自定义主机列表

打包主机清单,多处使用

将host4 ssh协议端口号改为默认22。

① 创建主机清单文件

[root@localhost ~]# vim /data/hostlist
[apache]
host[1:2][nginx]
host3
host4[webserver:children]
apache
nginx[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123'

② 指定 Inventory 主机清单的位置,访问管理节点

[root@localhost ~]# ansible -i /data/hostlist webserver -m ping -o
host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#访问成功,字体均为绿色

五、Ad-Hoc 点对点模式

1. 简介

指的是在不使用Playbook的情况下,直接使用ansible命令行工具执行临时命令。这些命令通常是一次性的、针对特定任务的,而不需要编写长期维护的Playbook。通过AD-Hoc命令,可以快速地在远程主机上执行特定的任务,比如文件操作、软件安装、服务管理等。

2. 模块

2.1 command 模块

command 模块允许用户在目标主机上执行特定的命令,主要功能是在远程主机执行命令,此为默认模块,可忽略 -m 选项;此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现 ;注意此模块不具有幂等性 。以下是 command 模块的一般用法:

ansible <host-pattern> -m command -a "<command>"
#<host-pattern> 是要操作的目标主机或主机组。
#-m command 指定要使用的模块是 "command"。
#-a "<command>" 传递给模块的参数,即要在目标主机上执行的命令。

示例: 复制文件至指定目录

如何修改默认模块?

[root@ansible ~]# vim /etc/ansible/ansible.cfg
114 #module_name = command

2.2 shell 模块

和command相似,用shell执行命令支持各种符号,比如:*,$, >,此模块不具有幂等性。

示例:创建文件hello.txt,写入内容hello

示例:提权操作

① 先在被控制端(host1)sudo授权

[root@localhost ~]# vim /etc/sudoers93 fql     ALL=(ALL)       NOPASSWD:ALL

② 以fql用户身份连接,然后以特权模式切换到fql用户,并执行whoami命令,查看当前登录用户

[root@ansible ~]# ansible host1 -m shell -a 'whoami' -u fql -k -b --become-user=fql
SSH password: 
[WARNING]: Module remote_tmp /home/fql/.ansible/tmp did not exist and was created with a mode of 0700, this may
cause issues when running as another user. To avoid this, create the remote_tmp dir with the correct permissions
manually
host1 | CHANGED | rc=0 >>
fql

2.3 script 模块

在远程主机上运行ansible服务器上的脚本(无需执行权限,本身不执行),此模块不具有幂等性。

示例:执行脚本新建hello文件

2.4 copy 模块

从ansible服务器主控端复制文件到远程主机,src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件。关键字选项如下:

src       #代表源文件路径
dest      #代表文件落地路径
owner     #属主
group     #属组
mode      #代表权限
backup    #如果复制时有同名文件会先备份再复制(注意:源文件内容有变化才会备份)

准备:被管理节点新建用户fql

示例:拷贝管理节点文件至被管理节点指定目录,并指定属主及权限

注意:

  • etc不加/:连etc一起复制,etc会变成子目录
  • etc加/:只复制etc下的文件

2.5 get_url 模块 

用于将文件从http、https或ftp下载到被管理节点上。关键字选项如下:

url:     #下载文件的URL,支持HTTP,HTTPS或FTP协议
dest:    #下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
owner:   #指定属主
group:   #指定属组
mode:    #指定权限
force:   #如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件
checksum:#对目标文件在下载后计算摘要,以确保其完整性(md5sum)
##可以检测文件是否有问题
[root@ansible ~]# md5sum nginx-1.18.0.tar.gz 
3ca4a37931e9fa301964b8ce889da8cb  nginx-1.8.0.tar.gz[root@ansible ~]# ansible web -m get_url -a 'url=https://nginx.org/download/nginx-1.18.0.tar.gz dest=/opt checksum="md5:3ca4a37931e9fa301964b8ce889da8cb"'

示例:下载nginx源码包至被管理节点指定目录

2.6 fetch 模块

从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录(可以将文件夹打包成压缩包传输)。

示例:拷贝被管理节点文件至服务端

2.7 file 模块

设置文件属性,创建软链接等,关键字选项如下:

path       #指定文件路径
state      #文件状态 有:新建(touch) 删除(absent) 文件夹(directory)  连接文件(link)等
src        #源文件
mode       #权限
owner      #属主
group      #属组
recurse    #递归,修改属性时有效

示例:

[root@ansible ~]# ansible web -m file -a 'path=/mnt/web.txt state=touch owner=fql group=fql mode=644'
#创建空文件
[root@ansible ~]# ansible web -m file -a 'path=/mnt/web state=directory'
#新建目录
[root@ansible ~]# ansible web -m file -a 'src=/mnt/web path=/opt/web-link state=link'
#新建软连接 path|dest|name   这三个选项都可以使用
[root@ansible ~]# ansible web -m file -a 'path=/opt/web-link state=absent'
#删除文件
[root@ansible ~]# ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
[root@ansible ~]# ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql recurse=yes"
#递归修改目录及子目录的属性

2.8 stat 模块

检查文件或文件系统的状态,对于Windows目标,请改用win_stat模块。

选项: 

  • path:文件/对象的完整路径(必须)

常用的返回值判断:

  • exists: 判断是否存在
  • isuid: 调用用户的ID与所有者ID是否匹配 

示例:判断文件是否存在

[root@ansible ~]# ansible webserver -m stat -a 'path=/opt/xxxxxx' -o
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "stat": {"exists": false}}
host3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "stat": {"exists": false}}
host4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "stat": {"exists": false}}
host2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "stat": {"exists": false}}
#不存在

2.9 unarchive 模块

解包解压缩。实现有两种用法:

  • 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略
  • 将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

常见参数:

copy:      #默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到被控制节点上,如果设置为copy=no,会在被控制节点上寻找src源文件
remote_src:#和copy功能一样且互斥,yes表示在被控制节点,不在ansible主机,no表示文件在ansible主机上
src:       #源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:      #被控制节点的目标路径
mode:      #设置解压缩后的文件权限 

示例:将管理节点压缩包解压到被管理节点

① 管理节点创建(或指定现有)压缩包

[root@ansible data]# touch {1..3}.txt
[root@ansible data]# ls
1.txt  2.txt  3.txt
[root@ansible data]# tar -zcvf file.tar.gz 1.txt 2.txt 3.txt .
[root@ansible data]# ls
1.txt  2.txt  3.txt  file.tar.gz

②  将管理节点压缩包解压到被管理节点

示例:将被管理节点压缩包解压到被管理节点,即压缩包从被管理节点寻找

2.10 archive 模块

对被管理节点文件进行压缩,打包压缩保存在被管理节点。

参数:

path=/var/log/:        #指定要打包的目录路径为/var/log/。
dest=/data/log.tar.bz2:#指定创建的归档文件名为log.tar.bz2,并保存在/data/目录下。
format=bz2:            #指定归档文件的格式为bz2,即使用 bzip2 进行压缩。
owner=fql:             #指定归档文件的所有者为fql。
mode=0600:             #指定归档文件的权限模式为0600,即只有所有者具有读写权限,没有执行权限

示例:

2.11 hostname 模块

管理主机名,一般不使用此模块,主机名会一致。

示例:修改host1主机名

[root@ansible ~]# ansible host1 -m hostname -a 'name=node1'

2.12 cron 模块

用于管理 cron 作业(定时任务),支持时间:minute,hour,day,month,weekday。

功能、参数:

功能:
添加/删除 cron 作业: #可以使用 Ansible 的 cron 模块添加新的 cron 作业或删除现有的作业。
修改 cron 作业:      #可以更新现有的 cron 作业的时间表、命令等信息。
列出 cron 作业:      #可以列出系统中所有的 cron 作业,以便进行查看和管理。参数:
name:        #cron 作业的名称。
minute/hour/day/month/weekday:  #cron 作业执行的时间表设定。
user:        #作业执行的用户。
job:         #要执行的命令或脚本。
state:       #指定作业的状态,可以是 present(存在)、absent(不存在)等。

示例:创建备份计划任务

示例:关闭计划任务

示例:删除计划任务

管理节点另外写法:ansible websrvs -m cron -a 'state=absent name=Synctime' 

2.13 yum 和 apt 模块  

yum管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本

apt类似yum模块的功能,主要管理Debian相关版本的软件包

参数:

Yum 模块参数:
name:             #要安装、升级或删除的软件包名称。
state:            #指定软件包的状态,可以是 present(存在)、latest(最新)、absent(不存在)等。
update_cache:     #指定是否更新 Yum 软件包缓存。
disablerepo:      #禁用特定的 Yum 软件源。
enablerepo:       #启用特定的 Yum 软件源。
disable_gpg_check:#禁用 GPG 检查。
installroot:      #指定要安装软件包的根目录。
update_only:      #仅更新软件包而不安装新软件包。
conf_file:        #指定要使用的 Yum 配置文件。apt 模块参数:
name:                  #要安装、升级或删除的软件包名称。
state:                 #指定软件包的状态,可以是 present(存在)、latest(最新)、absent(不存在)等。
update_cache:          #指定是否更新 apt 软件包缓存。
cache_valid_time:      #指定软件包缓存的有效时间。
force:                 #强制执行操作,即使可能有依赖关系问题。
allow_unauthenticated: #允许安装未经身份验证的软件包。
autoremove:            #自动删除不再需要的软件包。
purge:                 #卸载软件包并删除其配置文件。
upgrade:               #执行软件包升级操作。

示例:批量安装httpd

其他示例:

ansible websrvs -m yum -a 'name=nginx state=present enablerepo=epel'  #启用epel源进行安装
ansible websrvs -m yum -a 'name=* state=lastest exclude=kernel*,foo*' #升级除kernel和foo开头以外的所有包
ansible websrvs -m yum -a 'name=httpd state=absent'                   #删除

2.14 yum_repository 模块

用于管理 YUM 软件包管理器中的软件仓库配置的模块。它允许用户添加、删除和更新系统上的 YUM 软件仓库。

参数关键字:

name参数:			#必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
baseurl参数:		#此参数用于设置 yum 仓库的 baseurl。
description参数:	#此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
file参数:			#此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作					  为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。
enabled参数:		#此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
gpgcheck参数:		#此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。
gpgcakey参数:		#当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
state参数:		    #默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。

示例:批量新建yum仓库epel源

2.15 service 模块

管理系统服务状态的模块。它可以启动、停止、重新启动和重新加载系统服务。

参数关键字:

name参数:		#此参数用于指定需要操作的服务名称,比如 nginx。
state参数:	    #此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded。
enabled参数:	#此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。

示例:启动httpd服务并开机自启

2.16 mount 挂载和卸载

管理文件系统挂载和卸载的模块。它允许用户在远程主机上挂载和卸载文件系统,以及设置文件系统的相关属性。

主要参数:

path (必需): #要挂载或卸载的目标路径。
src:         #要挂载的设备、分区或者远程位置。
fstype:      #文件系统类型,例如 ext4、xfs 等。
state:       #可以是 mounted(已挂载)、unmounted(已卸载)或者 present(存在)。
opts:        #挂载选项,如 "rw"(读写)、"ro"(只读)等。
dump:        #控制备份程序是否应该备份文件系统。
passno:      #控制启动时文件系统检查的顺序。

示例:

#临时挂载
mount websrvs -m mount -a 'src="UUID=b3e48f45-f933-4c8e-a700-22a159ec9077" path=/home fstype=xfs opts=noatime state=present'
#临时取消挂载
mount websrvs -m mount -a 'path=/home fstype=xfs opts=noatime state=unmounted'
#永久挂载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads opts="_netdev" state=mounted'
#永久卸载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads state=absent'
#UUID为设备序列号,可以通过lsblk获得
[root@ansible ~]# ansible webserver -a "blkid"

2.17 user 模块

管理系统用户的模块。它允许用户创建、删除和修改系统用户以及相关属性。

主要参数:

comment         #用户的描述信息
createhome      #是否创建家目录
force           #在使用state=absent时, 行为与userdel –force一致.
group           #指定基本组(需要已存在的组)
groups          #指定附加组,如果指定为(groups=)表示删除所有组
home            #指定用户家目录
move_home       #如果设置为home=时, 试图将用户主目录移动到指定的目录
name            #指定用户名(必需)
non_unique      #该选项允许改变非唯一的用户ID值
password        #指定用户密码,使用 SHA512 hash
remove          #在使用state=absent时, 行为是与userdel –remove一致
shell           #指定默认shell
state           #设置帐号状态,不指定为创建,指定值为absent表示删除
system          #当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid             #指定用户的uid
update_password   #用于控制何时更新用户的密码。该参数有三个可能的取值:
always:           #始终更新用户密码。
on_create:        #仅在创建用户时更新密码。
never:            #永远不更新密码。

示例:添加用户

示例:删除用户 

2.18 group 模块

管理系统用户组的模块。它允许用户创建、删除和修改系统用户组以及相关属性。

主要参数:

name (必需):  #要操作的用户组名称。
state:        #可以是 present(存在)、absent(不存在)。
gid:          #用户组的 GID。
system:       #如果为 true,则创建一个系统用户组。
append:       #如果为 true,则将用户添加到指定的用户组中;如果为 false,则只会将用户包含在指定的用户组中

示例:创建组

示例:删除组 

2.19 reboot模块

重启远程主机的模块。它允许用户在远程主机上执行重启操作。

主要参数:

msg:               #在执行重启操作之前向远程主机发送的消息。
pre_reboot_delay:  #在重启之前等待的时间。
post_reboot_delay: #在重启后等待的时间。
test_command:      #用于测试重启完成后系统是否可访问的命令。
confirm:           #指定是否需要在执行重启操作之前进行确认,默认为 false。

示例:重启被管理节点服务器

[root@ansible ~]#ansible websrvs -m reboot

2.20 lineinfile 模块

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换。其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块。
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
如果想进行多行匹配进行替换需要使用replace模块。

关键字参数:

path	        #指定要操作的文件
regexp	        #使用正则表达式匹配对应的行
line	        #修改为新的内容
insertafter	    #将文本插入到“指定的行”之后
insertbefore	#将文本插入到“指定的行”之前
state	        #删除对应的文本时,需要state=absent
backrefs	    # 1.支持后向引用、2.当未匹配到内容则不操作文件
backup	        #是否在修改文件之前对文件进行备份
create	        #当要操作的文件并不存在时,是否创建对应的文件

示例:

查找内容:
ansible web -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 80'"
#修改apache监听端口替换内容:
ansible all -m   lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"
#关闭核心防护
ansible all -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'
#去掉#号

2.21 replace 模

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用。

示例:

ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"  
#给UUID开头行加上注释
ansible all -m replace -a "path=/etc/fstab regexp='^#(UUID.*)' replace='\1'"
#给#UUID开头行去掉注释
ansible web -m replace -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen.*' line='Listen 80'"
#修改监听端口为80

2.22 setup 模块

收集有关远程主机的各种系统信息。这些信息包括操作系统类型、IP 地址、内存和 CPU 使用情况、磁盘空间以及许多其他有用的系统级信息。这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度。可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息。

常用参数:

gather_subset: #指定要收集的子集信息,例如all, network, hardware, virtual等。
gather_timeout:#设置收集信息的超时时间,以秒为单位。
filter:        #用于过滤输出信息,可以根据需要选择性地显示特定信息。
fact_path:     #指定一个目录,将收集到的信息保存为 JSON 文件。
retries:       #在发生连接问题时尝试重新连接的次数。

示例:禁止 Ansible 收集 facts 信息

[root@ansible ~]# ansible all -m setup -a "gather_facts:no"

以上内容就是Ansible主机清单和单模块使用的介绍,Ad-Hoc 命令是一次性的、即时执行的命令,当我们需要执行多个任务、配置复杂场景或需要可重复使用的操作应该如何处理?下篇介绍Ansible非标记语言YAML与任务剧本Playbook-CSDN博客

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

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

相关文章

服务器数据恢复—raid5热备盘上线同步数据失败的如何恢复数据

服务器数据恢复环境&故障&分析&#xff1a; 一台存储上有一组由多块硬盘组建的raid5阵列&#xff0c;该raid5阵列中的一块硬盘掉线&#xff0c;热备盘自动上线同步数据的过程中&#xff0c;raid阵列中又有一块硬盘掉线&#xff0c;热备盘的数据同步被中断&#xff0c;r…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的日常场景下的人脸检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

摘要&#xff1a;开发用于日常环境中的人脸识别系统对增强安全监测和提供定制化服务极为关键。本篇文章详细描述了运用深度学习技术开发人脸识别系统的全过程&#xff0c;并附上了完整的代码。该系统搭建在强大的YOLOv8算法之上&#xff0c;并通过与YOLOv7、YOLOv6、YOLOv5的性…

第十五届蓝桥杯(Web 应用开发)模拟赛 3 期-大学组(被题目描述坑惨了)

目录 1.创意广告牌 2.原子化css 3.神秘咒语 4.朋友圈 5.美食蛋白揭秘 6.营业状态变更 7.小说阅读器 8.冰岛人 9.这是一个”浏览器“ 10.趣味加密解密 总结 1.创意广告牌 这个题目不多说了&#xff0c;只要知道这些css应该都能写出来&#xff0c;不会的平时多查查文…

python基于flask考研学习交流系统30vy7附源码django

考研在线学习与交流平台根据实际情况分为前后台两部分&#xff0c;前台部分主要是让用户使用的&#xff0c;包括用户的注册登录&#xff0c;首页&#xff0c;课程信息&#xff0c;在线讨论&#xff0c;系统公告&#xff0c;后台管理&#xff0c;个人中心等功能&#xff1b;后台…

【CSS面试题】外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷&#xff0c;也叫外边距折叠&#xff0c;在普通文档流中&#xff0c;在垂直方向上的2个或多个相邻的块级元素&#xff08;父子或者兄弟&#xff09;外边距合并成一个外边距的现象&#xff0c;不过只有上下外边距才会有塌陷&#x…

[蓝桥杯]-最大的通过数-CPP-二分查找、前缀和

目录 一、题目描述&#xff1a; 二、整体思路&#xff1a; 三、代码&#xff1a; 一、题目描述&#xff1a; 二、整体思路&#xff1a; 首先要知道不是他们同时选择序号一样的关卡通关&#xff0c;而是两人同时进行两个入口闯关。就是说两条通道存在相同关卡编号的的关卡被通…

104. Go单测系列4---编写可测试的代码

文章目录 一、剔除干扰因素二、接口抽象进行解耦三、依赖注入代替隐式依赖四、SOLID原则 本文是Go单测系列的最后一篇&#xff0c;在这一篇中我们不再介绍编写单元测试的工具而是专注于如何编写可测试的代码。 编写可测试的代码可能比编写单元测试本身更加重要&#xff0c;可测…

酒店客房管理系统设计与实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本酒店客房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

计算机网络(001-1)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.1到1.4的内容 简介 1.1计算机网络的作用 三网融合&#xff08;三网合一&#xff09; 模拟信号就是连续信号 数字信号是离散信号 1.2互联网概述 以前2兆带宽就要98 现在几百兆带宽也就几百块 …

峟思仪器助力尾矿库安全监测

在矿业领域&#xff0c;尾矿库的安全监测是保障矿山持续、安全运营的关键环节。尾矿库通常用于存放矿山开采过程中产生的固体废物&#xff0c;如果管理不善&#xff0c;可能会造成重大的安全事故&#xff0c;对环境和人类健康造成严重威胁。因此&#xff0c;采用先进的监测技术…

吴恩达深度学习笔记:神经网络的编程基础2.9-2.14

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.9 逻辑回归中的梯度下降&#xff08;Logistic Regression Gradient Descent&#xff09; 第一门课&#xff…

数字生活的未来:探索Web3的全新世界

随着科技的飞速发展&#xff0c;我们正迈向一个数字化的未来。而在这个数字化的时代&#xff0c;Web3技术的崛起正引领着我们进入一个全新的世界。本文将深入探讨Web3技术的特点以及它给我们带来的全新体验。 1. 去中心化的特点 Web3的去中心化是其最显著的特点之一&#xff0…

基于微信小程序的校园跑腿小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

智慧楼宇物联网建设实施方案(2)

建设方案 楼宇综合管理平台 智慧楼宇物联网应用综合管理系统是对整个物联网系统的集中监控和展示。其主要功能是对各应用子系统的关键监测数据进行数据格式解析并呈现。进而使管理者能够从整体上对整个物联网系统运行状态有个直观的了解。其不同于各专业子系统的管理软件,重…

蓝桥杯单片机快速开发笔记——定时器

一、基本原理&#xff1a; 定时器的作用&#xff1a; 定时器是一种用于产生精确时间延时的模块&#xff0c;可以在程序中用来进行时间控制、计时等操作。 定时器的工作原理&#xff1a; 51单片机的定时器是通过内部的计数器来实现的&#xff0c;计数器每隔一个固定的时间周期自…

Python之Web开发中级教程----创建Django项目

Python之Web开发中级教程----创建Django项目 使用虚拟环境&#xff1a; Workon py3_django3 1.创建Django项目 django-admin startproject name 例&#xff1a;git的本地仓库下新建studentmanager的项目 cd /home/go/work/gtest/ django-admin startproject bookmanager 新…

hadoop伪分布式环境搭建详解

&#xff08;操作系统是centos7&#xff09; 1.更改主机名&#xff0c;设置与ip 的映射关系 hostname //查看主机名 vim /etc/hostname //将里面的主机名更改为master vim /etc/hosts //将127.0.0.1后面的主机名更改为master&#xff0c;在后面加入一行IP地址与主机名之间的…

【CSP试题回顾】201709-3-JSON查询

CSP-201709-3-JSON查询 解题思路 1. 初始化数据结构 map<string, string> strContent: 存储字符串类型属性的内容。键是属性名&#xff08;可能包含通过点.连接的多级属性名&#xff09;&#xff0c;值是属性的字符串值。vector<string> keyVec: 存储当前正在处…

VsCode 使用密钥连接 Centos

在 centos 下生成密钥 ssh-keygen 执行上述命令后&#xff0c;一路回车&#xff0c;直到出现如下界面&#xff1a; 查看密钥生成情况 cd /root/.ssh ls 结果如下所示&#xff1a; 服务器上安装公钥 cd /root/.ssh cat id_rsa.pub >> authorized_keys ls >查看确…

CVE-2024-27199 JetBrains TeamCity 身份验证绕过漏洞2

漏洞简介 TeamCity Web 服务器中发现了第二个身份验证绕过漏洞。这种身份验证旁路允许在没有身份验证的情况下访问有限数量的经过身份验证的端点。未经身份验证的攻击者可以利用此漏洞修改服务器上有限数量的系统设置&#xff0c;并泄露服务器上有限数量的敏感信息。 项目官网…