SSH2协议加密与连接过程

article/2025/11/6 18:40:41

最近在做ssh2联动交换机模块,看到libssh2-1.9.0版本对于用户认证有三种不同的方式:

① password(默认)② keyboard-interactive ③ publickey

看代码并不是太理解,所以查询了一番,SSH2通信大致分为两步,以下是对通信过程的简单理解:

生成共享秘钥(加密通道):

1. 客户端先向服务器发起TCP连接。

2. 服务器回复自己所支持的SSH版本,若客户端也支持,则继续。

 3. 双方协商一个公共的加密算法,最终使用的加密法一般由机器上加密法列表的排序决定:客户端加密法列表上出现的第一个服务器端也支持的加密算法,将用于双方加密传输的实现。

4. 采用Diffie-Hellman算法,生成共享秘钥(这一块是重点)

① 客户端发起请求,服务器取两个数P、G ,其中P是一个很大的素数,G是P的一个模p本原单位根(primitive root module p),然后将G和P发送给客户端

客户端C会生成一个不公开的随机数a,计算CKey = G ^a mod P,将CKey发送给服务器。

③ 服务器S会生成一个不公开的随机数b,计算SKey = G ^b mod P,将SKey发送给客户端,同时发送的还有服务器的公钥。

④ 客户端C收到SKey后,计算共享秘钥:K = SKey ^a mod P = G ^(b * a) mod P,同时验证此公钥是否存在自己的known_hosts文件中,若不存在或不一致,则会提示是否确认连接。

⑤ 服务器S收到CKey后,计算共享秘钥:K = CKey ^b mod P = G ^(a * b) mod P。

用户认证:

第一种方式:password

根据前一步生成的共享秘钥,直接输入用户密码进行验证。(一般情况下,若没有特殊指定其他认证方式,默认用此认式)

第二种方式:keyboard-interactive

这个方式是必须启用键盘输入才可以,防止记住密码后直接登录。

第三种方式:publickey

1. 客户端生成一对秘钥:public/private key,并将公钥放到服务器的 authorized_keys 文件中。

2. 客户端发送一个秘钥ID给服务器。

3. 服务器收到之后,会在authorized_keys 文件中查找是否有此ID的公钥, 如果有,则服务器生成一个随机数x,并用客户端的公钥加密后通过加密通道发送给客户端。

4. 客户端收到之后,用私钥解除x,然后在本地为随机数x做MD5哈希,并通过加密通道发送给服务器。

5. 服务器为随机数x做MD5哈希,然后用共享秘钥加密后与客户端发送过来的数做比较,若一致,则认证通过。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

结语:

以上就是我对于SSH2通信的一个大致理解,若有错处,望指出,大家共同进步,谢谢!

主要参考链接:

1. 加密连接过程:理解SSH的加密与连接过程_ZStack上海云轴的博客-CSDN博客_ssh加密

2. Diffie-Hellman算法:Diffie-Hellman密码交换是如何运作的? - 知乎

3. Diffie-Hellman算法:浅析Diffie–Hellman 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------


http://chatgpt.dhexx.cn/article/2NCaKPG0.shtml

相关文章

来说说datatype

今天敲代码一直卡在一个问题上面好久那就是--datatype的未定义,起初不晓得datatype的含义,遇到这种情况首先想到的就是自己又忘记加上面头文件了。随即写了个stdlib.h上去。可是问题并没有得到解决,还是显示未定义。 怀疑是不是自己拼写的错误…

StringType报错,提示不是DataType类型

使用scala语言将RDD转化为sparkSQL时,构造StructType时StringType报错 val schema StructType( //构建函数,给每列数据一个统一的列名Seq(StructField("phoneNum",IntegerType,true),StructField("time",Integer…

mysql workbench的datatype设置问题

create table之后,创建column,选择datatype。我选择timestamp和datetime如图所示后就失败。 问题就在于要么去掉括号,要么括号里面填写数字。 成功后如图。 这里只要看paidTime的datatype即可。 这个问题真的花了我很久的时间,我…

datalist

在Web设计中,经常会用到如输入框的自动下拉提示,这将大大方便用户的输入。在以前,如果要实现这样的功能,必须要求开发者使用一些Javascript的技巧或相关的框架进行ajax调用,需要一定的编程工作量。但随着HTML5 的慢慢普及,开发者可…

TS DataType

TypeScript有13中数据类型 布尔值(Boolean) 最基本的数据类型就是简单的 true/ false值,在 JavaScript和 TypeScript里叫做 boolean(其它语言中也一样)。 let isDone: boolean false;数字(Number) 和 JavaScript一样, TypeSc…

Autosar DataType介绍

前言 看了一下基本的配置,发现Autosar的DataType的内容比较多,也比较复杂,所以单独开一章来记录一下 Autosar DataType介绍 前言一.基本数据类型1.1基本类型1.2其他类型 二,详细数据介绍2.1 新建数据类型的具体类型2.2 详细举例介…

contentType与dataType

$.ajax contentType 和 dataType , contentType 主要设置你发送给服务器的格式,dataType设置你收到服务器数据的格式。 在http 请求中,get 和 post 是最常用的。在 jquery 的 ajax 中, contentType都是默认的值:application/x-ww…

Types of Data

企业中的数据都如何分类? 粗略的分类 如果粗略点的分类话,可以分为两类数据:主数据和事务型数据。 主数据(Master Data) “Master Data is your business critical data that is stored in disparate systems spread across your Enterprise.…

Python DataType(数据类型)

简述 变量:指代任意一个数,或其他数据类型 变量名:大小写英文、数字和下划线(_)的组合,且不能用数字开头 Python主要的数据类型有如下:(允许自定义数据类型) 整数&…

条件随机场适用于无监督学习吗?

条件随机场适用于无监督学习吗? 在网上搜到的资料比较少。 HMM模型可以用EM算法来进行无监督学习。

深入理解机器学习——概率图模型(Probabilistic Graphical Model):条件随机场(Conditional Random Field,CRF)

分类目录:《深入理解机器学习》总目录 条件随机场(Conditional Random Field,CRF)是一种判别式无向图模型,在《概率图模型(Probabilistic Graphical Model):隐马尔可夫模型&#xff…

概率图模型之条件随机场

条件随机场(CRF)是一种判别式无向图模型。生成式模型是直接对联合分布进行建模,而判别式模型是对条件分布进行建模。前面提到的隐马尔可夫模型和马尔可夫随机场都是生成式模型,而条件随机场则是判别式模型。条件随机场试图对多个变…

马尔可夫随机场与条件随机场

文章目录 马尔可夫随机场1. 引言2. 团与极大团3. MRF联合概率4. MRF的条件独立性(有向分离)条件随机场 马尔可夫随机场 1. 引言 马尔可夫随机场(Markov Random Field,简称MRF),是马尔可夫网的一种,生成式模型,是一种著名的无向图…

通俗易懂条件随机场CRF

条件随机场CRF 条件随机场(Conditional Random Fields, 以下简称CRF)是给定一组输入序列条件下另一组输出序列的条件概率分布模型,在自然语言处理中得到了广泛应用。本系列主要关注于CRF的特殊形式:线性链(Linear chain) CRF。本文关注与CRF的模型基础。…

条件随机场(2)——概率计算

1.CRF简化表示 先回顾一下线性链CRF参数化形式 和都可以表示为随机变量的函数,因此,可以将和统一成 其中,是转移特征的个数,是状态特征的个数。特征函数所代表的特征集合一共有K个值,。 用来表示特征的权重&am…

条件随机场详细推导

条件随机场 条件随机场简介1.条件随机场简介 条件随机场举例2.条件随机场举例 条件随机场三个基本问题及推导3.条件随机场三个基本问题及推导 参考文献 条件随机场简介 1.条件随机场简介 马尔可夫随机场:设有联合概率分布P(Y),由无向图G(V,E)表示&…

经典算法: 条件随机场(conditional random field, CRF)

1. 引言 条件随机场,conditional random field,CRF,是给定一组输入随机变量的条件下,输出随机变量的条件概率分布模型。 条件随机场和隐马尔可夫模型的联系: 可以看到,条件随机场是一种无向图。 2. 概…

条件随机场原理介绍

1. 引言 条件随机场(Conditional random field,CRF)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。条件随机场常用于序列标注问题,比如命名实体识别…

条件随机场(CRF)概述

转自:原文链接 条件随机场是一种判别模型,用于预测序列。他们使用来自先前标签的上下文信息,从而增加了模型做出良好预测所需的信息量。在这篇文章中,我将讨论一些将介绍 CRF 的主题。我会过去: 什么是判别分类器&am…

条件随机场CRF的理解

1.个人理解和总结 对比HMM的状态转移概率矩阵和发射概率矩阵CRF有自己的定义在边上的特征函数(相当于转移概率)和定义在节点上的特征函数(相当月发射概率)序列标注HMM可以根据转移概率矩阵和发射概率矩阵计算出隐状态序列概率&am…