课时138:变量进阶_变量实践_综合案例

2.1.3 综合案例

学习目标

这一节,我们从 免密认证、脚本实践、小结 三个方面来学习

免密认证

案例需求

	A 以主机免密码认证 连接到 远程主机B

在这里插入图片描述

我们要做主机间免密码认证需要做三个动作1、本机生成密钥对2、对端机器使用公钥文件认证3、验证

手工演示

本地主机生成秘钥对
[root@localhost ~]# ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ncra/fPpaVs+M18l9Kn7CQq33zmWQSoJ/ujuugCkNjM root@localhost
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|   .      o   .  |
|  o    . + . . o.|
| E .    S . . +.o|
|. + .  o o o ..o.|
|     .. ..+..o  =|
|      .  .oo+ =%+|
|       o*+ ooBO*O|
+----[SHA256]-----+
将公钥信息传递给远程主机的指定用户
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.12
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.0.0.12 (10.0.0.12)' can't be established.
ECDSA key fingerprint is SHA256:XUJsgk4cTORxdcswxIKBGFgrrqFQzpHmKnRRV6ABMk4.
ECDSA key fingerprint is MD5:71:74:46:50:3f:40:4e:af:ad:d3:0c:de:2c:fc:30:c0.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.12's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@10.0.0.12'"
and check to make sure that only the key(s) you wanted were added.
本地主机测试验证效果
[root@localhost ~]# ssh root@10.0.0.12 "ifconfig eth0 | grep netmas"inet 10.0.0.12  netmask 255.255.255.0  broadcast 10.0.0.255

简单实践

remotehost_sshkey_auth.sh
#!/bin/bash
# 功能:设置ssh跨主机免密码认证
# 版本:v0.1
# 作者:书记
# 联系:www.superopsmsb.com# 定制普通变量
user_dir="/root"
login_uesr='root'
login_pass='123456'# 定制数组变量
target_type=(部署 免密 退出)# 定制安装软件的函数
expect_install(){yum install expect -y >> /dev/nullecho "软件安装完毕"
}# 定制ssh秘钥对的生成
sshkey_create(){# 清理历史秘钥[ -d ${user_dir}/.ssh ] && rm -rf ${user_dir}/.ssh# 生成新的秘钥ssh-keygen -t rsa -P "" -f ${user_dir}/.ssh/id_rsa >> /dev/nullecho "秘钥生成完毕"
}# 定制expect的认证逻辑
expect_process(){# 注意:这里不要乱用$1,可以参考函数和脚本间的数组传参command="$@"expect -c "spawn ${command}expect {\"*yes/no*\" {send \"yes\r\"; exp_continue}\"*password*\" {send \"${login_pass}\r\"; exp_continue}\"*Password*\" {send \"${login_pass}\r\";}}"
}# 跨主机密码认证
sshkey_auth(){local host_list="$1"for i in ${host_list}docommand="/usr/bin/ssh-copy-id -i /root/.ssh/id_rsa.pub"remote="${login_uesr}@$i"expect_process ${command} ${remote}done
}# 定制服务的操作提示功能函数
menu(){echo -e "\e[31m---------------管理平台操作界面---------------"echo -e " 1: 秘钥准备  2: 免密认证  3: 退出操作"echo -e "-------------------------------------------\033[0m"
}# 定制脚本帮助信息
Usage(){echo "请输入有效的操作标识!!!"
}# 定制业务逻辑
while true
domenuread -p "> 请输入要操作的目标类型: " target_idif [ ${target_type[$target_id-1]} == "部署" ];thenecho "开始部署秘钥环境..."expect_installsshkey_createelif [ ${target_type[$target_id-1]} == "免密" ];thenread -p "> 请输入免密10.0.0网段主机的范围,示例{12..19}: " num_list# eval的隐藏命令解析ip_list=$(eval echo 10.0.0.${num_list})sshkey_auth ${ip_list}elif [ ${target_type[$target_id-1]} == "退出" ];thenecho "准备退出管理操作界面..."exitelseUsagefi
done
脚本执行效果
[root@localhost ~]# /bin/bash remotehost_sshkey_auth.sh
---------------管理平台操作界面---------------1: 秘钥准备  2: 免密认证  3: 退出操作
-------------------------------------------
> 请输入要操作的目标类型: 1
开始部署秘钥环境...
软件安装完毕
秘钥生成完毕
---------------管理平台操作界面---------------1: 秘钥准备  2: 免密认证  3: 退出操作
-------------------------------------------
> 请输入要操作的目标类型: 2
> 请输入免密10.0.0网段主机的范围,示例{12..19}: {12..13}
spawn /usr/bin/ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.12
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.12's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@10.0.0.12'"
and check to make sure that only the key(s) you wanted were added.---------------管理平台操作界面---------------1: 秘钥准备  2: 免密认证  3: 退出操作
-------------------------------------------
> 请输入要操作的目标类型: 3
准备退出管理操作界面...

小结


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

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

相关文章

预热 618,编程好书推荐——提升你的代码力

文章目录 📋前言🎯编程好书推荐📘 Java领域的经典之作🐍 Python学习者的宝典🌐 前端开发者的权威指南🔒 并发编程的艺术🤖 JVM的深入理解🏗 构建自己的编程语言🧠 编程智…

WJ2EDGKA-5.08-8P功能和参数介绍及PDF资料

WJ2EDGKA-5.08-8P 是一款接线端子,以下是它的主要功能和参数介绍: 间距: 5.08mm(0.2英寸),这是指相邻针脚之间的中心距离。 针脚数: 8个针脚(1X8Pins),这意味着该端子可以连接8根导线…

01- Redis 中的 String 数据类型和应用场景

1. 介绍 String 是最基本的 key-value 结构,key 是唯一标识,value 是具体的值,value 其实不仅是字符串,也可以是数字(整数或浮点数),value 最多可以容纳的数据长度是 512M。 2. 内部实现 Str…

基于Zynq 7000 SoC的迁移设计

基于Zynq 7000 SoC的迁移设计 Vivado IDE工具使用IP集成器进行嵌入式开发。各种IP Vivado IDE IP目录中提供,以适应复杂的设计。您也可以添加 自定义IP到IP目录。 您可以将基于Zynq 7000平台处理器的设计迁移到Vivado design Suite中 使用以下步骤。 1.生成系统基础…

知攻善防应急响应靶机训练-Web3

前言 本次应急响应靶机采用的是知攻善防实验室的Web-3应急响应靶机 靶机下载地址为: https://pan.quark.cn/s/4b6dffd0c51a 相关账户密码 用户:administrator 密码:xj123456xj123456 解题过程 第一题-攻击者的两个IP地址 直接查看apache的log日志搜索.php 发现…

磁力搜索器

磁力链接是一种特殊的下载链接,磁力链接可以理解为一个文件识别码,而并非具体的资源地址,下载软件需要拿着这个识别码去整个互联网(DHT网络)去寻找持有该资源的用户(节点),如果找到则可以进行传输下载。一般年代越久远的磁力链接下…

今日总结2024/5/27

今日学习了状态压缩DP,状态压缩DP分为棋盘型(基于连通性)和集合型 Acwing.1064 小国王 在 nn的棋盘上放 k个国王,国王可攻击相邻的 8个格子,求使它们无法互相攻击的方案总数。 输入格式 共一行,包含两个整数 n和 k。 输出格式 共一行&…

图像处理知识积累

冲激响应 冲激响应是系统在单位冲激函数激励下引起的零状态响应,它与系统的传递函数互为傅里叶变换关系。在连续时间系统中,任一个信号可以分解为具有不同时延的冲激信号的叠加,因此冲激响应可以描述系统的基本特性。通过电路分析法求解…

【华为OD机试-C卷D卷-200分】篮球游戏(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 幼儿园里有一个放倒的圆桶,它是一个线性结构,允许在桶的右边将篮球放入,可以在桶的左边和右边将篮球取出。 每个篮球有单独的编号,老师可以连续放入一个或多个…

三维大场景管理-3Dtiles规范

简介 : 这篇文章都是三年前写的了,一直在笔记库存中,今天把他放出来。主要是讲Cesium 的3Dtiles 格式,当然3Dtiles主要是解决场景管理大场景的LOD实现的问题,不管是剔除渲染性能优化之Culling 剔除或者 LOD 、3Dtiles…

【JAVA】JSONObject.fromObject(message)引发的JSONObject 详解

【JAVA】JSONObject.fromObject(message)引发的JSONObject 详解 一、JsonObject 简介二、JsonObject 基本操作2.1 、创建 JSONObject2.2、访问和操作 JSONObject2.3 生成 JSON 字符串2.4、示例代码 三、JsonObject 常见库3.1、使用 org.json 库3.2、使用 net.sf.jso…

Java 8的Stream API的使用说明,轻松实现集合的各种转换

Java 8中的Stream API为函数式编程带来了极大的便利,使得处理集合数据变得更加高效和简洁。以下是关于Java 8 Stream API的使用说明,我会尽量按照清晰的结构进行分点表示和归纳: 一、Stream API的基本概念 Stream:Stream是Java 8…

Educational Codeforces Round 158 B. Chip and Ribbon (贪心)

有一条带子,分为 n 个单元格,从左到右编号为 1 至 n 。最初,每个单元格中都写入了一个整数 0 。 单细胞与芯片玩游戏。游戏由几个回合组成。在第一轮中,Monocarp 将芯片放入色带的 1 -st 单元中。除了第一轮之外,在每…

SSM基于微信小程序的校园表白墙的设计与实现-计算机毕业设计源码58219

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园表白墙微信小程序被用户普遍使用,为方便用…

Java面试八股之自旋是什么意思

Java中的自旋是什么意思 自旋是多线程编程中的一种同步机制,尤其在Java中与锁的实现密切相关。当一个线程尝试获取某个锁(如内置锁或显式锁)时,如果锁已被其他线程持有,通常的做法是将该线程置于阻塞状态,…

图形学概述

图形学应用 游戏 游戏的画面好坏如何鉴定呢? 看游戏画面是否够亮:渲染中全局光照的好坏 《只狼》 为什么卡通游戏画面看起来是卡通的呢? 《无主之地3》 这些都是图形学需要着手解决的问题 电影 电影《黑客帝国》的特效也是通过计算机…

软件测试面试题(九)

一:说说你对SQA的职责和工作活动的理解? 答:SQA就是独立于软件开发的项目组,通过软件开发过程的监控,来保证软件开发流程按照指定的CMM规程,对于不符合项目及时提出来的建议和改进方案,必要是可…

HTTPS加密过程

今天我们说https具体工作原理。 HTTPS概念 HTTPS是一种网络协议,传统的HTTP是明文传输,非常 不安全,所以HTTPS是基于HTTP基础上进行加密传输内容。 HTTPS使用加密传输方式 第一种是非对称加密,是前期建立连接时候使用的数据加密…

Unity 直线间隔放置物体

直线间隔放置物体 0. 新建一个空物体,挂上脚本ZYF_QuickPlaceObj 设置 间隔距离 和 预制体在Scene中拖动即可按间隔距离实例化物体物体的朝向始终朝向统一方向,并且可以在Scene中拖拽更改 传送门

QML-1- qml简介及项目创建

文章目录 1. QML 简介2. 项目创建3. 目录结构4. CMakeLists.txt 简单介绍5. 运行demo 1. QML 简介 根据官网介绍,qml 为qt一个模块,使用Qml语言开发应用程序和库提供了一个框架。它定义并实现了语言和引擎基础结构,并提供了一个API&#xff…