课时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: 1

Now 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/null
    echo "软件安装完毕"
}

# 定制ssh秘钥对的生成
sshkey_create(){
    # 清理历史秘钥
    [ -d ${user_dir}/.ssh ] && rm -rf ${user_dir}/.ssh
    # 生成新的秘钥
    ssh-keygen -t rsa -P "" -f ${user_dir}/.ssh/id_rsa >> /dev/null
    echo "秘钥生成完毕"
}

# 定制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}
    do
        command="/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
do
    menu
    read -p "> 请输入要操作的目标类型: " target_id
    if [ ${target_type[$target_id-1]} == "部署" ];then
        echo "开始部署秘钥环境..."
        expect_install
        sshkey_create
    elif [ ${target_type[$target_id-1]} == "免密" ];then
        read -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]} == "退出" ];then
        echo "准备退出管理操作界面..."
        exit
    else
        Usage
    fi
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: 1

Now 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
准备退出管理操作界面...

小结


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

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

相关文章

MyBatis报错:TypeException Could not set parameters for mapping问题解决

MyBatis报错:TypeException: Could not set parameters for mapping问题解决 问题收录 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{proper…

【详细介绍下PostgreSQL】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

考研数学|强化跟「张宇」还是「武忠祥」?看这一篇!

考研数学强化阶段是备考过程中非常关键的一环,它不仅要求学生巩固和深化基础知识,还要求学生能够灵活运用所学知识解决复杂问题。 在选择张宇老师或武忠祥老师的高数强化课时,你可以考虑以下几个方面。 首先每位学生都有自己独特的学习风格…

图片数据增强-resize(不同插值)、各种模糊

各种不同的模糊处理 import os import cv2def apply_blur_to_images(input_folder_path, output_folder_path):# 遍历文件夹下的所有文件for filename in os.listdir(input_folder_path):# 检查文件类型是否为图片if filename.endswith(.jpg) or filename.endswith(.jpeg) or …

探索演进:了解IPv4和IPv6之间的区别

探索演进:了解IPv4和IPv6之间的区别 在广阔的互联网领域中,设备之间的通信依赖于一组独特的协议来促进连接。前景协议中,IPv4(Internet 协议版本 4)和 IPv6(Internet 协议版本 6)是数字基础设施…

ThreadLocal简介

Thread类中,有个ThreadLocal.ThreadLocalMap 的成员变量。 ThreadLocalMap内部维护了Entry数组,每个Entry代表一个完整的对象,key是ThreadLocal本身,value是ThreadLocal的泛型对象值 public void set(T value) {Thread t Thread…

【Text2SQL 论文】IncSQL:通过增量式生成 action 序列来得到 SQL

论文:IncSQL: Training Incremental Text-to-SQL Parsers with Non-Deterministic Oracles ⭐⭐⭐ ICLR 2019,arXiv:1809.05054, Microsoft Research 一、论文速读 本文提出了 IncSQL,一个使用 Non-Deterministic Oracles 思路的增量式 Text…

问题记录_stm32“No target connected“

问题描述: 基于HAL库和stm32cubeMX生成的代码,烧录时出现如下报错窗口: 问题原因: stm32cubeMX生成代码时关闭了SWJ调试功能 解决方法: 在项目中找到__HAL_AFIO_REMAP_SWJ_DISABLE();并注释掉 然后短按复位键的…

电脑技巧:一台主机两个显示器的连接设置方法

目录 一、先与电脑连接好两个显示器 二、先来看看WIN7连接两个显示器设置方法 三、再来看看WIN10连接两个显示器设置方法 在日常办公场景中,为了提高工作效率和增强交互体验,常需一台电脑同时连接两个显示器,正如我们在营业厅常见到的那样…

这是你要找的可视化开发平台吗?【送源码】

今天着重推荐一款高效的拖拽式低代码数据可视化开发平台 它就是 goView 它将图表或页面元素封装为基础组件,无需编写代码即可制作数据大屏,减少心智负担。 介绍 框架:基于 Vue3 框架编写,使用 hooks 写法抽离部分逻辑&#xf…

Java通过Html(ftl模板)生成PDF实战, 可支持商用

Java通过Html(freemarker模板)生成PDF实战, 可支持商用 技术架构 springboot freemarker [pdfbox] flying-saucer-pdf 生成流程: freemarker: 根据数据填充ftl模板文件,得到包含有效数据的html文件(包含页眉页脚页码的处理&#xff0c…

服务器软件架构演进

服务器软件架构演进 背景介绍阶段一:单机部署阶段二:应用与数据分离部署阶段三:启用缓存优化阶段四:启用应用服务器集群阶段五:数据库读写分离阶段六:启用反向代理及CDN加速阶段七:启用分布式文…

论文阅读--GroupViT

视觉之前做无监督分割的时候,经常使用grouping方法:如果有一些聚类的中心点,从这写点开始发散,把周围相似的点逐渐扩充成一个group,这个group就相当是一个segmentation mask 右边是grouping block,左边的两…

【Java】IdentityHashMap 的使用场景

文章目录 前言1. Druid 应用场景2. IdentityHashMap 特性3. IdentityHashMap 同步化4. IdentityHashMap 处理key为空值后记 前言 最近有兴趣看一下 Druid 连接池怎么做连接管理的,看到一个类 IdentityHashMap ,这里记录一下使用场景。 1. Druid 应用场…

MySQL数据库语法(二)

一、数据库的创建 创建数据库CRATE DATABASE语法&#xff1a;CREATE DATABASE [IF NOT EXISTS]数据库名;功能&#xff1a;用给定的名字创建一个数据库如果数据库已经存在&#xff0c;发生一个错误。查看创建数据库&#xff1a;SHOW CREATE DATABASE <数据库名>&#xff…

通过键值对访问字典

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;如果想将字典的内容输出也比较简单&#xff0c;可以直接使用print()函数。例如&#xff0c;要想打印dictionary字典&#xff…

【Redis】Widows 和 Linux 下使用 Redis

Redis 简述 1.缓存 缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代 CPU 越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。 2.Redis Redis …

神龙秘籍 无极神功 无极管理 真正的力量来自于自我内心。每个人都有潜力成为伟大的,只需要相信自己并发现内在的力量。

功夫熊猫中神龙秘籍的含义 在动画电影《功夫熊猫》中&#xff0c;神龙秘籍&#xff08;Dragon Scroll&#xff09;是一个具有重要象征意义的物品。影片通过神龙秘籍传达了几个深刻的主题和教训。 内在力量与自我发现&#xff1a;当阿宝&#xff08;Po&#xff09;最终打开神龙…

【物联网实战项目】STM32C8T6+esp8266/mqtt+dht11+onenet+uniapp

一、实物图 前端uniapp效果图&#xff08;实现与onenet同步更新数据&#xff09; 首先要确定接线图和接线顺序&#xff1a; 1、stm32c8t6开发板连接stlinkv2下载线 ST-LINK V2STM323.3V3.3VSWDIOSWIOSWCLKSWCLKGNDGND 2、ch340串口连接底座&#xff08;注意RXD和TXD的连接方式…

如何理解 Java 类和对象

Java 中的类和对象是学习 Java 编程的基础之一。类是 Java 中的核心概念之一&#xff0c;它提供了一种组织和封装数据以及相关行为的方式。对象是类的实例&#xff0c;它是在运行时创建的&#xff0c;具有特定的状态和行为。 类和对象的概念 1. 类&#xff08;Class&#xff…