网站集群批量管理-密钥认证与Ansible模块

news2024/12/22 20:28:38

一、集群批量管理-密钥认证

1、概述

管理更加轻松:两个节点,通过密钥形式进行访问,不需要输入密码,仅支持单向.

服务要求(应用场景):

  • 一些服务在使用前要求我们做秘钥认证.
  • 手动写批量管理脚本.

名字: 密钥认证,免密码登录,双机互信.

2、原理

在这里插入图片描述

税钥对:

公钥:public key 一般以 .pub 结尾.

私钥:private key 没有特殊的结尾

3、上手指南

基本检查

#检查网络是否能通
ping ip地址
#检查端口连通性。telnet ip 22也可以,nmap多用于多ip和扫描所有端口
nmap -p22 ip地址
3.1、创建密钥对

只能创建一次,否则再次创建会导致密钥失效。说明其他服务通过秘钥链接的全部失效

ssh-keygen -t rsa
#注意创建的啥时候也可以不加-t
通过rsa方法对数据进行加密,
[root@localhost .ssh]# tree
.
├── id_rsa
└── id_rsa.pub

在这里插入图片描述

3.2、分发公钥
#传给你需要免密测试的那台机器(-i /root/.ssh/id_rsa.pub可省略)
ssh-copy-id root@IP地址
ssh-copy-id -i /root/.ssh/id_rsa.pub root@IP
#传到对端服务器改名为
[root@localhost .ssh]# tree
.
├── authorized_keys
3.3、连接测试
ssh root@IP地址

4、自动化创建与分发密钥

阻碍:

  • 创建密钥对
  • 分发公钥的时候:yes/no(yes后会把信息保存到.ssh/known_hosts)
  • 分发公钥的时候:输入密码
4.1、自动化创建密钥
ssh-keygen -t rsa -f  ~/.ssh/id_rsa -P ''

-f 用于指定私钥的位置

-P 密码短语 设置为空

4.2、自动化分发公钥
sshpass -p*** ssh-copy-id -oStrictHostKeyChecking=no IP地址

#安装密码提供密码
yum install -y sshpass
#sshpass命令基本使用
-p 指定密码:
sshpass -p*** ssh 10.0.0.7 hostname -I
#使用sshpass 与ssh-copy-id分发公钥
sshpass -p*** ssh-copy-id -oStrictHostKeyChecking=no IP

补充说明:

sshpass适用于给ssh相关的命令提供密码:ssh,scp,ssh-copy-id.

阻碍:第1次连接的时候提示yes/no

温馨提示:第1次远程的提示 yes/no,主机密钥信息检查,输入yes后存放到~/.ssh/known_hosts 解决思路:临时取消即可,连接的时候不检查主机信息、-oStrictHostKeychecking=no 临时不检查主机信息。

SSH使用密钥对来进行身份验证和加密通信。当你连接一个未知的主机时,SSH会生成一个主机密钥对,并将公钥发送给你的客户端。你的客户端会提示你是否要保存这个公钥。如果你选择保存,该公钥将被存储在你的本地计算机上的一个文件中,通常是 known_hosts 文件中。之后,当你再次连接该主机时,SSH会使用这个已保存的公钥来验证主机的身份,以确保连接的安全性。

4.3、自动化创建密钥与分发脚本
1.0

#!/bin/bash
# author: linux皆文件
# version: v1.0
# desc: creating key, distributing key
 
# 1 vars
password=1
ips="10.0.0.7 10.0.0.31"
 
# 1.4 Networking or not
# 1.5 Whether yum is supported
 
# 2 Creating a key_pair
if [ -f ~/.ssh/id_rsa ] ;then
   echo "The key_pair already exists"
else
   echo "Creating a key_pair..."
   ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
fi
 
# 3 Batch send public_key through a loop
for ip in $ips
do
   sshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStricHostKeyChecking=no $ip &>/dev/null
   echo "$ip success..."

1.1

#!/bin/bash
# author: linux皆文件
# version: v1.1
# desc: creating key, distributing key
 
# 1 vars
password=a
ips="10.0.0.7 10.0.0.31"
. /etc/init.d/functions
 
# 1.4 Networking or not
# 1.5 Whether yum is supported
 
# 2 Creating a key_pair
if [ -f ~/.ssh/id_rsa ] ;then
   echo "The key_pair already exists"
else
   echo "Creating a key_pair..."
   ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
   if [ $? -eq 0 ] ;then
      action "Key_pair created successfully" /bin/true
   else
      action "Key_pair creation failure" /bin/false
   fi
fi
 
# 3 Batch send public_key through a loop
for ip in $ips
do
   sshpass -p${password} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/null
   if [ $? -eq 0 ] ;then
       action "$ip success..." /bin/true
   else
       action "$ip failure..." /bin/false
   fi
done

密钥自动化检查脚本
[root@m01 ~]# cat /server/scripts/check.sh
#!/bin/bash
# author: linux皆文件
# desc: 批量在所有机器上执行命令
for  ip  in  10.0.0.7  10.0.0.31 
do
  ssh  $ip  hostname
done

二、集群自动化维护-必备工具-Ansible

官方文档:链接指南

1、概述

自动化运维: 批量管理,批量分发,批量执行,维护

Ansible是python写的.

批量管理工具说明
Ansible无客户端,基于ssh进行管理和维护
Saltstack需要安装客户端,基于shh进行管理
terraformtf批量管理基础设施(批量创建100台公有云)例如:腾讯云

2、Ansible管理架构

  • Inventory 主机清单:被管理主机的ip列表,分类
  • ad-hoc模式:命令行批量管理(使用ans模块),临时任务
  • playbook 剧本模式:类似于把操作写出脚本,可以重复运行这个脚本

在这里插入图片描述

3、配置与部署

3.1、部署
yum install -y ansible
3.2、配置

修改配置文件

  • 关闭主机认证Host_key_checking
  • 开启日志功能.
root@m01 ~]# egrep -nv '^$|^#' /etc/ansible/ansible.cfg
10:[defaults]
71:host_key_checking = False
111:log_path = /var/log/ansible.log
327:[inventory]
340:[privilege_escalation]
346:[paramiko_connection]
370:[ssh_connection]
431:[persistent_connection]
445:[accelerate]
460:[selinux]
469:[colors]
485:[diff]

4、Ans-inventory主机清单

  • 什么是主机清单: 让ansible管理的节点的列表.
  • ansible默认读取在/etc/ansible/hosts文件,并非/etc/hosts.
  • 未来实际使用中一般我们会把主机清单文件存放在指定的目录中,运行ansible的时候通过 - i 选项指定主机清单文件即可.
4.1、主机清单必会格式

主机清单格式: [分类或分组的名字] #注意分类要体现出服务器的作用 ip地址或主机名或域名 #注意主机名要能解析才行

[root@m01 ~]# cat /etc/ansible/hosts
[backup]
10.0.0.41
[web0]
10.0.0.7

在这里插入图片描述

主机清单分组详解:

需要我们进行分组:按照层次进行分组,按照功能/业务.

ansible命令格式

ansible主机ip / 分组 / all

-m 指定使用的模块名字,这里的ping模块用于检查被管理端是否可以访问。

4.2、子组

创建新的分组data包含已有的分组web和nfs

[root@m01 ~]# cat /etc/ansible/hosts
[backup]
10.0.0.41
[web]
10.0.0.7
[data:children]
web
backup

[root@m01~]# ansible data -m ping
4.3、指定用户和密码

不推荐,推荐先配置密钥认证,然后管理

[root@m01~]# cat /etc/ansible/hosts
[web]
10.0.0.7
[nfs]
10.0.0.31 ansible_user=root ansible_password=*** ansible_port=22
4.4、报出错误提示
  • 主机清单为空

在这里插入图片描述

  • 没有关闭主机认证,去配置文件中host_key_checking = False

在这里插入图片描述

5、Ansible必知必会模块

  • Ansible模块概述

    • ansible中的模块就类似于Linux中的命令,我们Linux命令管理系统,我们通过ansible模块实现批量管理.
    • ansible中模块一般相当于Linux中的一些命令.yum模块,file模块,user模块.
    • ansible中的模块拥有不同的选项,这些选项一般都是一些单词.。Ansible模块 modules
  • Ansible中通过各种模块实现批量管理

  • 一般来说这些模块对应着Linux里面的基本操作或服务管理

  • 找出Linux场景操作对应的模块即可

模块分类模块
命令和脚本模块command模块 ans默认的模块,执行简单命令,不支持特殊符号
shell模块 执行命令,支持特殊符号
script模块 分发脚本并执行
文件file创建目录,文件,软连接,
copy远程分发文件,修改权限,所有者,备份
服务systemd服务管理
service服务管理(了解)
软件包yum源 yum_repository
yum命令
get_ur1下载软件
系统管理mount模块 挂载
cron模块定时任务
用户管理group模块 管理用户组
user模块 管理用户
其他可以研究压缩解压(unarchive),rsync模块(synchronize),数据库模块(mysql_db,mysq1_user)…
其他ansible管理docker k8s zabbix grafana …
用于调试模块ping模块检查ansible与其他节点连通性.
debug模块用于检查/显示变量
ansible
ansible主机清单(all/web/172.16.1.7)-m模块-a模块中的选项
-i 指定主机清单文件
-m 指定模块
-a 指定模块
5.1、命令与脚本模块
a)command 模块

可以省略。

是ans默认的模块,适用于执行简单的命令,不支持特殊符号.

批量获取所有主机的主机名

ansible all -m command -a 'hostname'
b)shell模块

与command模块类似,但是shell支持特殊符号.

批量获取ip地址

ansible all -m shell -a "ip a s eth0 |awk -F'[ /]+' 'NR==3{print$3}' "

温馨提示:

shell模块不推荐执行较为复杂的指令,如果需要执行放在脚本中执行

c)script模块

分发脚本(传输脚本)

运行脚本

ansible all -m script -a '/sh/xunjian.sh'
5.2、文件相关模块
a)file模块

管理文件,管理目录,软连接

file模块模块说明
path路径(目录,文本)必须写
src源文件,一般用于link(创建软连接模式)用于指定源文件
state状态(模式) state=directory 创建目录 state=file (默认) 更新文件,如果文件不存在也不创建 state=link 创建软连接 state=touch 创建文件
statestate=absent 删除(注意递归删除目录)
modemode=755 创建并修改权限
ownerowner=root
groupgroup=root

创建文件

ansible all -m file -a 'path=/data/test.txt state=touch'

创建目录

ansible all -m file -a 'path=/app/a/b/c/d state=directory'

修改权限

ansible all -m file -a 'path=/data mode=700'

删除目录及其下面文件

ansible all -m file  -a 'path=/app/ state=absent'

不能表示删除目录下的文件(表示只删除app目录下名叫* 的文件)

ansible all -m file  -a 'path=/app/* state=absent'

创建软连接 /etc/hosts创建软连接到/opt/下

ansible all -m file -a 'src=/etc/hosts path=/opt/hosts state=link'
b)copy模块

批量分发:scp

copy模块
srcsource 源文件
destdestination 目标
backupbackup=yes 则会在覆盖前进行备份
mode修改权限
owner修改为指定所有者
group修改为指定用户组

把本机解析hosts覆盖全部

ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'
5.3、服务管理-sysytemd

systemd模块相当于是linux systemctl命令:

  • 开启/关闭/重启服务
  • 开机自启动
systemd模块说明
name用于指定服务名称
enabledyes开机器启动(yes/no)
state表示服务开,关,重启. state=started 开启 state=stopped 关闭 state=reloaded 重读配置文件 starte=restsrted 重启(关闭再开启)
daemon-reloadyes是否重新加载对应的服务的管理配置文件(未来讲解书写systemctl配置文件)
ansible all -m systemd -a 'name=crond enabled=yes state=started'
#关闭服务
ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
#重启ssh
ansible all -m systemd -a 'name=sshd state=reloaded'

额外扩展: systemd模块适用于目前大部分的Linux系统. service模块适用于管理旧的Linux系统.

5.4、软件管理

yum模块

get_url模块,wget命令

yum_repository模块yum源配置模块,未来可以通过copy模块

a)yum模块
yum模块
name指定软件包名字,可以指定多个,通过 ,分割
stateinstalled 安装(也可以写为present)(默认) removed 删除(也可以号为absent) lastest 安装或更新
update_cache可以设置为no加加速,表示不更新本地yur缓存,实际应用建议开启
ansible all -m yum -a 'name=htop,tree,lrzsz,sshpass'
b)get_url 模块

相当于是wget命令.所有主机能访问网络才行.

推荐在管理节点下载好,使用copy仅分发即可.

get_url下载功能
url指定要下载的地址
dest下载到哪个目录
ansible all -m file -a 'path=/app/tools/ state=directory'
ansible all -m get_url -a 'url="https://mirrors.aliyun.com/zabbix/zabbix/6.0/rh el/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpm" dest=/app/tools/'
c)yum_repository模块

未来书写好yum配置文件,copy分发过去即可.

ansible all -m copy -a 'src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/ backup=yes'
yum源模块 yum_repository
nameyum源中名字 [epel]
descriptionyum源的注释说明 对应的 是name的内容
baseurlyum源中 baseurl 下载地址
enabled是否启动这个源 yes/no
gpgcheck否启动gpgcheck功能 no
file指定yum源的文件 自动添加.repo 默认与模块名字一致,
5.5、用户管理

user用户管理:useradd,userdel

group用户组管理:groupadd

user模块
user模块
name用户名
uid指定uid
group指定用户组,一般用于事先创建好了用户组,通过选项指定下
shell指定命令解释器:默认是/bin/bash /sbin/nologin
create_home是否创建家目录(yes/no)
statepresent 添加 absent 删除

创建www-ans用户uid 2000虚拟用户

ansible all -m user -a 'name=www-ans uid=2000 shell=/sbin/nologin create_home=no state=present'

批量更新密码

ansible all -m user -a "name=test password={{ '1' | password_hash('sha512', 'lidao') }} state=present"
ansible all -m shell -a 'echo 1 |passwd --stdin test'

关于{{}}相关的解释 {{ ‘1’ | password_hash(‘sha512’, ‘lidao’) }} 表示1是密码,经过管道,传递给了password_hash()插件, sha512加密算法,lidao是随机字符用于生成随机加密后的密码.

group模块
group模块
nane指定用户组名字
gid指定组的gid
statepresent添加 absent 删除

6、mount模块

实现mount命令进行挂载可以修改/etc/fstab实现永久挂载.

mount选项说明
fstypefilesystem type指定文件系统,xfs,ext4,nfs
src源地址(43.135.140.22:/backup-nfs/)
path挂载点(要把源挂载到哪里)
state参考下表
mount模块的state参数可使用的值
absent卸载升修改fstab
unmounted卸载不修改/etc/fstab
present仅修改/etc/fstab 不挂载
mounted挂载并修改/etc/fstab
remounted重新挂载

通过ans管理在web01上挂载nfs:/data挂载到web01的/ans-upload/

nfs 服务端配置,目录
web 挂载
web 是否安装nfs
web 创建挂载点

#在web服务器上安装nfs
ansible web -m yum -a 'name=nfs-utils state=present'
#创建挂载点
ansible web -m file -a 'path=/ans-upload/ state=directory'
#挂载nfs
ansible web -m mount -a 'src=172.16.1.31:/data/ path=/ans-upload/ fstype=nfs state=mounted'
#检查
ansible web -a 'df -h'
ansible web -a 'grep upload /etc/fstab '

7、cron模块

用于管理系统的定时任务,替代了crontab -e功能.

cron模块 选项说明
name定时任务名字(一定要加上),对应下面注释的内容
minute分钟 minute=“*/2”
hour小时
day日期
month月份
week周几
job指定命令或脚本(定向到空)job=“/sbin/ntpdate ntp1.aliyun.com &>/dev/null”
statepresent 添加定时任务(默认) absent 删除

创建定时任务

ansible all -m cron -a 'name="sync time by linux" minute="*/3" job="/sbin/ntpdate ntp1.aliyun.com &>/dev/null"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 的复制延迟:理解与解决方案

一、什么是 MySQL 的复制延迟? 在 MySQL 数据库中,复制是一种将数据从一个数据库服务器(主服务器)复制到一个或多个数据库服务器(从服务器)的机制。复制延迟指的是主服务器上的数据更改与这些更改在从服务…

DBeaver显示PostgreSQL数据库的信息模式

DBeaver连接PostgreSQL数据库后,默认情况下是不加载信息模式的,如果有需要,我们可以通过设置显示信息模式。 具体步骤:点击数据库连接–>右键打开设置–>连接设置–>常规–>导航视图–>自定义–>勾选显示系统对…

Python 基于 flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析

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

springboot的调度服务与异步服务实操

1.调度服务 1.1.JDK之ScheduledExecutorService 讲到调度任务,我们脑海里马上会想到ScheduledExecutorService。 ScheduledExecutorService是 Java java.util.concurrent 包中的一个接口,它继承自 ExecutorService 接口。它主要用于在给定的延迟后运行…

计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计

《PythonSpark知识图谱微博舆情预测》开题报告 一、课题背景与意义 随着互联网技术的飞速发展,社交媒体平台如微博已成为人们表达观点、交流信息的重要渠道。微博每天产生海量的数据,这些数据中蕴含着丰富的社会情绪、事件动态等信息,对于政…

从概念到使用全面了解Llama 3 这个迄今为止最强大的开源模型

概述 mate最近发布了 Llama3,下一代最先进的开源大语言模型(LLM)。正如本文的综合评论所述,Llama 3 以其前身奠定的基础为基础,旨在增强 Llama 2 成为 ChatGPT 重要开源竞争对手的能力 Llama 2:深入探讨 C…

【更新】红色文化之红色博物馆数据集(经纬度+地址)

数据简介:红色博物馆作为国家红色文化传承与爱国主义教育的重要基地,遍布全国各地,承载着丰富的革命历史与文化记忆。本数据说明旨在汇总并分析全国范围内具有代表性的红色博物馆的基本信息,包括其地址、特色及教育意义&#xff0…

Scrapy框架入门

一、Scrapy简介 Scrapy是一款快速而强大的web爬虫框架,基于Twisted的异步处理框架、Twisted是事件驱动的。 Scrapy是由python实现的爬虫框架:架构清晰、可扩展性强、可以灵活完成需求。 一、Scrapy应用 scrapy及其他模块的安装 pip3 install scrapy…

【Java编程系列】使用java接入Microsoft Graph,实现发送邮件功能

1、前言 微软与2022年10月1号,开始停止了部分服务的 basic auth (账密登录)功能,需要改用 oauth2.0 协议接入相应服务。邮件方面主要在于IMAP和pop协议。并且与2023年1月1日时,正式全面停止账密登录使用去接入上述服务…

【Python报错已解决】[notice] A new release of pip available: 22.2 -> 22.2.2

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

共享单车轨迹数据分析:以厦门市共享单车数据为例(九)

副标题:基于站点800m范围内评价指标探究——以吕厝站为例 上篇文章我们以厦门市为例,来通过POI和优劣解距离法(TOPSIS)来研究厦门岛内以800m作为辐射范围的地铁站哪些地铁站发展的最好,根据综合得分指数可以知道&…

架构设计笔记-5-软件工程基础知识-2

知识要点 构件组装是将库中的构件经适当修改后相互连接,或者将它们与当前开发项目中的软件元素连接,最终构成新的目标软件。 构件组装技术大体可分为: 1. 基于功能的组装技术:基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序…

KPaaS集成平台与传统集成有什么不同?

企业的业务系统越来越复杂,集成需求也日益增长,同时也面临着如何高效、低成本地实现多系统集成的挑战。传统集成方式虽然能够提供高度定制化的解决方案,但其高昂的成本、复杂的实施过程以及后续的维护难题却让许多企业望而却步。在这样的背景…

【Python报错已解决】KeyError: ‘key‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Nginx基础详解4(location模块、nginx跨域问题的解决、nginx防盗链的设计原理及应用、nginx模块化解剖)

续Nginx基础详解3(nginx.conf核心代码讲解、常用命令解析、Nginx日志切割)-CSDN博客 目录 10.location模块详解 10.1默认匹配规则‘ /’ 10.2精确匹配规则‘/’ 10.3正则表达式‘~* \’ 10.4精确正则匹配~ \ 10.5路径匹配‘^~ /’ 11.nginx中解决…

深度解析:Python蓝桥杯青少组精英赛道与高端题型概览

目录 一、蓝桥杯青少组简介二、赛项组别与年龄范围三、比赛内容与题型1. 基础知识范围2. 题型设置2.1 选择题2.2 编程题 3. 考试时长 四、奖项设置与激励措施五、总结 一、蓝桥杯青少组简介 蓝桥杯全国软件和信息技术专业人才大赛(简称“蓝桥杯”)是由工…

“等保测评实践:提升企业网络安全管理水平“

随着信息技术的快速发展,网络安全问题日益成为企业关注的焦点。等级保护(简称等保)测评作为提升企业网络安全管理水平的重要手段,其在数字化转型的今天显得尤为重要。本文将探讨如何通过等保测评实践,构建企业网络安全…

PWM 模式

一、介绍 PWM(脉宽调制,Pulse-width modulation)是一种通过调节脉冲信号的宽度来控制电能输出的方法。PWM是一种方波信号,通常在电子和电气工程中用于调节功率输送,控制电机速度,调节LED亮度,以…

数据结构-3.7.双端队列

一.双端队列的三种形式: 双端队列也可以是只在一端删除和添加,此时就是栈; 双端队列在一端添加,另一端输出,此时就是队列; 二.判断输出序列合法性: 题目:若数据元素输入序列为1&am…

AI产品经理PRD文档与传统产品经理PRD有什么不同呢?

目录 模型输出:说白了,就是你的AI要干啥数据接入:你的AI要吃啥“粮食”验收标准:怎么判断你的AI干得好不好经验总结 你好,我是三桥君 在工作中,当我作为传统产品经理时,通常只需提供产品需求文…