Shell脚本系列| SSH分发公钥方法 - expect脚本的使用

news2024/11/19 13:42:38

ssh原理:在SSH安全协议的原理中, 是一种非对称加密与对称加密算法的结合。用于确保远程登录和其他网络服务的会话安全,通过非对称加密、会话加密、多重验证机制等手段,保护数据传输的机密性和完整性。
ssh登录有2种方法:账号密码登录和公钥登录

一、帐号密码登录

没办法公证,不像https有CA证书公证。
在这里插入图片描述

1.服务端收到登录请求后,首先互换公钥。
2.客户端用服务端的公钥加密账号密码并发送
3.服务端用自己的秘钥解密后得到账号密码,然后进行验证
4.服务端用客户端的公钥加密验证结果并返回
5.客户端用自己的秘钥解密后得到验证结果

二、ssh免密码登录

利用公钥登录
在这里插入图片描述
步骤:

1.客户端用户必须手动地将自己的公钥添加到服务器一个名叫authorized_keys的文件里,顾名思义,这个文件保存了所有可以远程登录的机器的公钥。

2.客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)

3.服务端根据指纹检测此公钥是否保存在authorized_keys中

4.若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回

5.客户端收到后用自己的私钥解密,再利用服务端公钥加密后发回

6.服务端收到后用自己的私钥解密,如果为同一字符串,则验证通过

三、分发密钥方法

1)ssh分发

ssh-keygen --help

-t type:指定密钥类型,包括“dsa”, “ecdsa” or “rsa”
-p() :更改私钥的密码。程序会提示输入私钥的密码以及2次新密码
-P():提供私钥的旧密码。
-N:提供私钥的新密码
-f :指定密钥文件的文件名
-b:指定密钥长度
-e:读取openssh的私钥或者公钥文件

ssh-copy-id命令:

ssh-copy-id [-i [identity_file]] [user@]machine
选项:-i 指定要分发的公钥

2 ) 使用expect解决交互式分发

expect脚本中常见命令:spawn, expect, send, interact…

spawn打开一个进程

expect该命令从进程接受字符串,如果接受的字符串和期待的字符串不匹配,则一直阻塞,直到匹配上或者等待超时才继续往下执行
expect会等待特定的输出(如"password:"),然后发送相应的响应(如密码)。

send向进程发送字符串,与手动输入内容等效,通常字符串需要以’\r’结尾

expect{"匹配字符" send {"需要发送的"} 
"匹配字符"send{"需要发送的字符"}}
或者
expect "匹配字符" 
send "发送字符\r"

interact该命令将控制权交给控制台,之后就可以进行人工操作了。通常用于使用脚本进行自动化登录之后再手动执行某些命令。如果脚本中没有这一条语句,脚本执行完将自动退出。

set timeout 30 设置超时时间timeout为30s,expect命令阻塞超时时会自动往下继续执行。将timeout配置为-1时表示expect一直阻塞直到与期待的字符串匹配上才继续往下执行。超时时间timeout默认为10s

[lindex $argv n]可以在脚本中使用该命令获取在脚本执行时传入的第n-1个参数。argv为传入的参数,另外argc表示传入参数的个数,n是从0开始,表示第一个参数…n=1表示第二个参数

exp_continue:继续执行下面匹配

\r:linux下的回车(Enter键)
安装

yum -y install expect

expect脚本:

[root@localhost ~]# vi ssh.exp
[root@localhost ~]# cat ssh.exp 
#!/usr/bin/expect

set timeout 30
set ip [lindex $argv 0]                    #第1个参数,编号是0
set password [lindex $argv 1]              #第2个参数,编号是1  

spawn ssh-copy-id -i /root/.ssh/id_dsa.pub root@$ip
expect {
         "(yes/no)?"  {send "yes\r";exp_continue}
         "password:" {send "$password\r"}
}
expect eof
expect /server/script/ssh_expect.exp 192.168.200.10 000000    
#192是第1个参数,编号是0 000000是第2个参数,编号是1

实现自动分发,无需手动输入ip及密码,将expect程序嵌套在shell脚本 :

[root@localhost ~]# cat autossh.sh 
#!/bin/bash
#########################1.创建密钥##################
. /etc/init.d/functions   # 注意. /之间是有空格的,不然就变成"当前目录"的"."了
#/etc/init.d/functions 是一个包含了一系列用于初始化脚本(init scripts)的函数的库文件
#点号(.)是source命令的简写,用于在当前shell环境中执行脚本,而不是创建一个新的子shell 
  if [ ! -e "/root/.ssh/id_dsa.pub" ];then 
    ssh-keygen -t dsa -P '' -f /root/.ssh/id_dsa >/dev/null 2>&1
    if [ $? -eq 0 ];then
             action "创建密钥成功" /bin/true
    else
            action "创建密钥失败" /bin/false
            exit 0
    fi
  else
    action "密钥已存在" /bin/true
  fi
######################2.分发密钥####################
for ip in 10.10.102.{129..180}  #是一个 Bash 的大括号扩展。它会生成一个序列,从 129 到 180。
do
/usr/bin/expect << EOF > /dev/null 2>&1
spawn ssh-copy-id -i /root/.ssh/id_dsa.pub -p22 $ip
expect {
        "yes/no" {send "yes\r";exp_continue}
        "password" {send "000000\r"}
}
expect eof
EOF
if [ $? -eq 0 ];then
        action "$ip分发密钥完成" /bin/true
else
        action "$ip分发密钥失败" /bin/false
fi
done

在这里插入图片描述

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

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

相关文章

图书商城系统

文章目录 图书商城系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 图书商城系统 一、项目演示 网上书城 二、项目介绍 基于SSM的图书商城网站 运行环境:idea或eclipse 数据库:mysql 开发语…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Web组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Web组件 提供具有网页显示能力的Web组件&#xff0c;ohos.web.webview提供web控制能…

4. TypeScript

目录 1 TypeScript 介绍 2 TypeScript 常用类型 2.1 类型标注的位置 2.2 字符串、数字、布尔类型 2.3 字面量类型 2.4 interface 类型 2.5 class 类型 Vue1&#xff1a;基础跟使用方式 Vue2&#xff1a;路由方面 Vue3&#xff1a;状态管理 vuex 状态管理库 1 TypeScrip…

鸿蒙原生应用再添新丁!央视新闻 入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;央视新闻 入局鸿蒙 来自 HarmonyOS 微博2月9日消息&#xff0c;#央视新闻启动鸿蒙原生应用开发#中央广播电视总台旗舰央视新闻客户端正式宣布&#xff0c;将基于HarmonyOS NEXT鸿蒙星河版&#xff0c;启动央视新闻 鸿蒙原生应用开发&#xf…

springboot微信小程序 uniapp学习资料分享系统v9uy4

理论意义 当今网络教学已成为各国教育改革 和发展的趋势。因此&#xff0c;构建一个适合交互式课堂教学模式的教学平台就成了当务之 急。 在国内高校&#xff0c;目前交互平台主要用于网络学院的远程教学&#xff0c;至于校园内的正规教学&#xff0c;老师自发建立课程主页的比…

Web后端开发:事务与AOP

事务管理 在学习数据库时&#xff0c;讲到&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求&#xff0c;要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三…

VUE学习——数组变化侦测

官方文档 变更方法&#xff1a; 使用之后&#xff0c;ui可以直接发生改变。改变原数组 替换数组&#xff1a; 使用之后需要接受重新赋值&#xff0c;不然ui不发生改变。不改变原数组

深度学习的进展及其在各领域的应用

深度学习&#xff0c;作为人工智能的核心分支&#xff0c;近年来在全球范围内引起了广泛的关注和研究。它通过模拟人脑的学习机制&#xff0c;构建复杂的神经网络结构&#xff0c;从大量数据中学习并提取有用的特征表示&#xff0c;进而解决各种复杂的模式识别问题。 一、深度…

一、OpenAI API介绍

Open AI API可以应用到任何的业务场景。 文本生成 创造助理 嵌入数据 语音转化 图片生成 图片输入 1. 核心概念 1.1 Text generation models OpenAI 的文本生成模型(通常被称为generative pre-trained transformers 模型简称&#xff1a;GPT),有GPT-4和G…

RCS-YOLO复现

复现结果–Precision&#xff1a;0.941&#xff0c;Recall&#xff1a;0.945&#xff0c;AP 50 _{50} 50​&#xff1a;0.941&#xff0c;AP 50 : 95 _{50:95} 50:95​&#xff1a;0.693&#xff0c;误差在5个点内&#xff0c;可以接受 感想 第5篇完全复现的论文

postman接口功能测试

前言 之前还没实际做过接口测试的时候呢&#xff0c;对接口测试这个概念比较渺茫&#xff0c;只能靠百度&#xff0c;查看各种接口实例&#xff0c;然后在工作中也没用上&#xff0c;现在呢是各种各样的接口都丢过来&…

客观看待前后端分离,优劣、场景、对程序员职业的影响

前后端分离倡导多年了&#xff0c;现在基本成为了开发的主流模式了&#xff0c;贝格前端工场承接的前端项目只要不考虑seo的&#xff0c;都采用前后端分离模式。 一、在前端开发中&#xff0c;前后端分离是指什么 在前端开发中&#xff0c;前后端分离是一种架构模式&#xff…

python爬虫入门(一)

使用requests 库获取网站html信息 import requests response requests.get("https://jingyan.baidu.com/article/17bd8e52c76b2bc5ab2bb8a2.html#:~:text1.%E6%89%93%E5%BC%80%E6%B5%8F%E8%A7%88%E5%99%A8F12%202.%E6%89%BE%E5%88%B0headers%E9%87%8C%E9%9D%A2%E7%9A%84…

Java:集合以及集合进阶 --黑马笔记

一、集合概述和分类 1.1 集合的分类 除了ArrayList集合&#xff0c;Java还提供了很多种其他的集合&#xff0c;如下图所示&#xff1a; 我想你的第一感觉是这些集合好多呀&#xff01;但是&#xff0c;我们学习时会对这些集合进行分类学习&#xff0c;如下图所示&#xff1a;…

微信小程序上传代码教程

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 小程序上传代码到gogs上面来 整体架构流程 小程序也要远程连接仓库&#xff0c;实现代码上传 技术名词解释 微信开发者工具gogs 技术细节 连接gogs仓库地址 微信小程序需要head将本地代码和gogs代码同步 小结 …

【C生万物】数组

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

node.js基础-02

Author nodes&#xff1a;&#xff08;题记&#xff09; Hypertest Transfer protocol is very important to programming personnel。it doesnt matter if youre a front-end engineer or a back-end engineer.So,lets study it together. http协议对于编程工程师很重要&am…

python coding with ChatGPT 打卡第19天| 二叉树:合并二叉树

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

【C++】实现一个二叉搜索树

目录 二叉搜索树的概念 1.结点定义 2.构造、析构、拷贝构造、赋值重载 3.插入、删除、查找、排序 3.1插入 3.2插入递归版 3.3查找指定值 3.3查找指定值递归版 3.4中序遍历 3.5删除 最后 二叉搜索树的概念 二叉搜索树又称为二叉排序树或二叉查找树&#xff0c;它或者…

python WEB接口自动化测试之requests库详解

由于web接口自动化测试需要用到python的第三方库--requests库&#xff0c;运用requests库可以模拟发送http请求&#xff0c;再结合unittest测试框架&#xff0c;就能完成web接口自动化测试。 所以笔者今天先来总结一下requests库的用法。希望对大家&#xff08;尤其是新手&…