SSH协议理论讲解

news2024/9/26 3:21:45

目录

基本概念

SSH协议的组成

SSH工作原理

SSH版本协商阶段(确定V1版本或V2版本)

算法协商阶段

密钥交换阶段

用户认证阶段

会话交互阶段


基本概念

SSH(Secure Shell)安全外壳协议,是一种用于在不安全网络上进行安全远程登录和实现其他安全网络服务的协议(建立在应用层基础上的安全协议,TCP端口号22)

SSH协议的组成

SSH协议主要由三个组件组成

SSH传输层协议-主要进行SSH版本协商、算法协商、密钥交换

SSH传输层和TCP的传输层是不同的概念,SSH传输层是一个安全传输协议

SSH传输层通常建立在TCP/IP连接上,但是也可以在任何可靠的数据流上建立

SSH用户认证协议-主要用于用户认证

为服务器提供客户端的用户鉴别,使得服务器信任客户端

运行在SSH传输层协议之上

SSH连接协议-主要用于建立SSH会话连接

运行在SSH运输层协议和用户认证协议之上

SSH会话连接可以复用成若干个逻辑通道(包含TCP/IP转发通道、X11通道、交互式登录会话通道、远程执行命令通道)  用的比较多的是交互式登录会话

TCP/IP转发通道

Telent、SMTP、IMAP等其它基于TCP/IP的不安全协议就可以通过此通道变得安全

X11通道

11是X协议的版本,Linux底层协议就是X协议

X11主要用于登录Linux图形化界面时使用的,保证通信安全

交互式登录会话通道

程序进行远程执行时,保证其安全(程序可以是Shell、应用程序、系统命令或一些内置的子系统)  例如通过Python进行远程配置时就通过此通道保证安全

在Python中通过Paramiko库的SSHClient类中的incoker_shell()方法可以开启交互式登录会话通道

远程执行命令通道

Linux执行命令(查看目录等)时保障其安全

在Python中通过Paramiko库的SSHClient类中的exec_command()方法可以开启远程执行命令通道

 


SSH工作原理

为实现SSH的安全连接,服务器和客户端需要经历以下五个阶段

其中前三个阶段明文传输,后两个阶段密文传输

(以下介绍的SSH传输层协议是建立在TCP/IP连接上的)

SSH版本协商阶段(确定V1版本或V2版本)

会话交互阶段报文交互

 

SSH协商版本报文携带SSH版本号、次协议号、软件协议号

其中SSH版本号是必须携带的,此协议号和软件协议号可选

 

 

服务器如何协商SSH版本

服务器收到报文后,解析SSH版本号

如果客户端和服务器支持的版本号一致,则协商成功

如果客户端的SSH版本号比自己的低,且服务器能支持客户端的低版本,就使用客户端的协议号,协商成功;如果服务器不支持客户端的低版本,协商失败

如果客户端的SSH版本号比自己的高,则协商失败

算法协商阶段

确定密钥交换算法、公钥算法、对称加密算法、消息认证算法

算法类型

算法协商阶段的报文交互

 

服务器收到Client Key Exchange Init之后,根据客户端的算法查找自身的算法列表进行匹配

每种算法(密钥交换算法、公钥算法、加密算法、认证算法)都匹配成功才会进入下一阶段

服务器如何协商算法

服务器从客户端的算法列表取出第一个算法,在自己的算法列表中查找,如果协商成功,继续协商下一种算法;否则继续从客户端的算法列表中取出下一个算法进行协商

当服务器和客户端之间有多个相同的算法,则会根据算法的优先级选择优先级最高的算法

(例如:两边的认证算法都支持MD5和SHA,这个时候就会协商出一个优先级高的认证算法来使用)

密钥交换阶段

根据上阶段协商出来的密钥交换算法,动态产生会话密钥用于后续会话加密

密钥交换阶段报文交互

一般密钥交换算法使用DH算法,密钥交换过程类似IPsec的密钥交换过程

 

在密钥交换过程中私钥Xc,Xs始终是保密不传播的,由于DH算法的复杂其他用户即使获取了p,g,Yc,Ys也无法推断出私钥Xc,Xs,从而保证了会话密钥的安全性。

注意

密钥交换阶段产生的公私钥仅用于产生会话密钥,与后续用户认证无关

密钥交换阶段产生的公私钥在生成Session Key之后就会清除掉

密钥交换阶段完成后,后续所有报文交互均会被会话密钥Session Key加密

用户认证阶段

口令认证或公钥认证两种认证方式  报文被加密

口令认证方式

客户端通过用户名和密码登录到服务器,完成用户认证

每次认证都要输入用户名和密码

公钥认证方式

服务器通过客户端的公钥解密客户端发来的数字签名,完成用户认证(信任客户端)

会话交互阶段

进行报文交互   报文加密

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

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

相关文章

Redisson实现延迟队列

k8s部署单点Redis (1)k8s部署redis的yaml文件 apiVersion: apps/v1 kind: Deployment metadata:creationTimestamp: nulllabels:app: redisname: redis spec:replicas: 1selector:matchLabels:app: redisstrategy: {}template:metadata:creationTimestamp: nulllabels:app: r…

Jmeter系统学习

Jmeter体系结构 Jmeter概念: 元件:每一个功能,例如Http请求,响应断言等。 组件:每一类元件的组合,例如采样器,配置元件。 Jmeter体系可以分为3个维度: X1--X5:负载模…

(二十八)Vue之组件化编码流程

文章目录组件化编码流程拆分静态组件实现动态组件实现交互实现添加实现勾选实现删除实现全选与全不选实现清除已完成任务TodoList案例小细节Vue学习目录上一篇:(二十七)Vue组件的样式 先看一个需求:TodoList案例 功能&#xff1a…

c# http请求使用multipart/form-data 方式上传文件及其他参数

这次的需求是请求java那边的一个excel批量上传的接口。但是他们的接口要求是这样的 于是自己写了个方法: 调用: 控制器层 var file this.HttpContext.Request.Files[0];//获取前端传来的文件 var fileName file.FileName; //注意&…

控制RK3568的GPIO

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、设备树中是如何描述引脚的?1.pinctrl子系统2.gpio子系统二、使用步骤总结前言 RK3568的引脚资源还是相当多的,一共有5组GPIO&#x…

数图互通高校房产管理——房屋修缮管理

数图互通房产管理系统在这方面做得比较全面; 实现房屋修缮改造、装修维护、零星维修线上管理,建立机制规范管理,避免私自改扩建。 建筑物立项审批全流程资料和过程管理,建筑物修建施工、维修审批流程管理。整套系统包含了建筑物从…

链下签名实现

什么是签名 比如我们在使用 opensea 的时候,经常会提示我们进行数字签名,如下图: 用户进行 sign 确认,即用自己的私钥对一段数据进行签名,得到一个 signature,其他人可以使用你私钥对应的公钥&#xff0c…

推荐5款Windows桌面效率工具

今天我想分享一些自己比较喜欢的桌面端软件,还请大家包涵指正。如果你曾搜索过 Windows 效率工具推荐,对下文的软件或许有所了解。不过为了凑字数,我还是会再介绍一遍。 1.文件定位——Listary Listary 是我使用频率最高的软件之一&#xf…

Java重点源码回顾——HashMap1.8

1. 概述 在之前的文章中,我们介绍了HashMap1.7的源码,今天我们来看下HashMap1.8的源码。HashMap1.8相比于1.7最大的改变就是改变了1.7中采用数组链表的方式存储键值对,转而由数组链表红黑树的方式来存储键值对。HashMap1.8的底层结构如下图所…

RPC 好,还是 RESTful 好

OSI网络七层模型 RPC服务 RPC架构 同步调用与异步调用 流行的RPC框架 HTTP服务 总之 RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更…

【python】py课后作业程序题5「PTA」

py字典合集7-1 Python猜数游戏7-2 jmu-python-分段函数7-3 循环求e的近似值(高教社,《Python编程基础及应用》习题6-7)7-4 jmu-python-判断是否构成三角形7-5 jmu-python-输入输出-计算字符串中的数7-6 jmu-python-随机生成密码7-7 jmu-pytho…

vscode使用CMake Tool插件构建第一个CMake的helloworld工程

vscode使用CMake Tool插件构建第一个CMake的helloworld工程一、linux环境准备1.1 CMake安装1.2 gcc/g的安装二、vscode 插件安装2.1 C扩展2.2 CMake Tool三、使用CMake构建第一个工程3.1 创建工程目录3.2 使用CMake Tool创建第一个Project3.3 Configure 第一个project四、构建工…

Java中序列化接口Serializable的serialVersionUID的作用

原文网址:Java中序列化接口Serializable的serialVersionUID的作用_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java中序列化接口Serializable的serialVersionUID的作用。 序列化与反序列化 含义 序列化:将java对象转化为字节序列。反序列化&#xff1a…

【mysql】索引的基本使用

文章目录1. 索引的声明与使用1.1 索引的分类1.2 创建索引1.2.1 创建表的时候创建索引(隐式)1.2.2 在已经存在的表上创建索引(显式)1、创建普通索引2、创建唯一索引3、主键索引4、创建单列索引5、创建联合索引6、创建全文索引7、创…

33、基于STM32的计时器(Proteus仿真+程序)

编号:33 基于STM32的计时器 功能描述: 使用proteus 软件设计一个基于STM32的家用计时器,该系统包含多个按键、LED运行灯和时间显示(时间显示是LCD1602) 其功能如下: 1、利用按键实现设置计时时间功能,时间格式:AB:CD:E 例如01:5…

【攻防世界】江苏工匠杯 Web easyphp

打开页面是一个代码审计的题目&#xff0c;是我不太熟悉的东西&#xff0c;但是没关系&#xff0c;我们可以学是吧&#xff0c;以下为源代码 <?php highlight_file(__FILE__); $key1 0; $key2 0;$a $_GET[a]; $b $_GET[b];if(isset($a) && intval($a) > 60…

【ES实战】ES集群节点迁移与缩容

ES集群节点迁移与缩容 文章目录ES集群节点迁移与缩容master节点迁移场景一场景二场景三data节点迁移数据迁移操作1、查询集群原来的配置2、清空节点数据3、检查是否排空数据迁移原则缩容前置检查项master节点迁移 场景一 集群上的master部署情况&#xff0c;一台机器上同时部…

智能化IT运维平台建设方案,基于智和信通运维体系的高敏捷二次开发

随着企业信息进程不断加速&#xff0c;运维人员需要面对越来越复杂的业务和越来越多样化的用户需求&#xff0c;不断扩展的应用需要越来越合理的模式、越来越智能的工具来保障运维能灵活便捷、安全稳定地开展。企业网络规模的不断扩大&#xff0c;从初期的几台服务器发展到庞大…

Python3 | vscode配置环境

vscode版本&#xff1a;1.74.2python版本&#xff1a;3.9.0win10系统 准备工作&#xff0c;在win10系统 1&#xff0c;安装python3&#xff0c;配置环境变量2&#xff0c;安装vscode 接下来&#xff1a;就可以在vscode配置python环境 1&#xff0c;下载和安装python插件 快…

2022年总结以及2023年的计划

2022年总结以及2023年的计划 文章目录2022年总结以及2023年的计划年终复盘投资理财学习方面前端方面&#xff1a;后端方面&#xff1a;数据库&#xff1a;读书&#xff1a;疫情工作爱情新的一年的展望按照每年的惯例&#xff0c;我每年的总结&#xff0c;复盘会在这几天完成。 …