SSH安全协议介绍

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系!    

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录和文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。作为Telnet和其他不安全远程shell协议的安全替代方案,目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。

为什么需要SSH?

传统的互联网通信使用明文传输数据,内容一旦被截获就会完全暴露,存在很多安全隐患。SSH协议通过对网络数据进行加密和验证,建立SSH客户端和SSH服务器之间的安全隧道,在不安全的网络环境中为网络服务提供了安全的传输通道。

SSH最常用的场景是远程登录和文件传输。在SSH协议出现之前,Telnet广泛应用于远程登录场景,为远程管理网络设备提供了极大便利,而FTP作为常用的文件传输协议,兼具操作简单和传输效率高的优点,但它们都存在相同的问题,即明文传输数据带来的安全隐患。SSH采用加密传输数据、提升认证强度等手段,克服了Telnet和FTP应用中的安全性问题,实现了安全的远程登录和文件传输业务。


SSH常用场景

SSH是如何工作的?

SSH由服务器和客户端组成,为建立安全的SSH通道,双方需要先建立TCP连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。SSH的工作流程包括如下几个阶段。


SSH工作流程

连接建立

SSH依赖端口进行通信。在未建立SSH连接时,SSH服务器会在指定端口侦听连接请求,SSH客户端向SSH服务器该指定端口发起连接请求后,双方建立一个TCP连接,后续会通过该端口通信。

默认情况下,SSH服务器使用端口号22。当SSH应用于NETCONF时,可以指定默认端口号是22或者830。SSH使用的端口号可以被更改为设备其他可用端口,更改后当前所有的连接都会断开,SSH服务器开始侦听新的端口。由于SSH默认端口号22为知名端口,在进行关键安全传输时,建议修改SSH端口号。

版本协商

SSH协议目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0协议相比SSH1.X协议来说,在结构上做了扩展,可以支持更多的认证方法和密钥交换方法,同时提高了服务能力。SSH服务器和客户端通过协商确定最终使用的SSH版本号,过程如下:

1. SSH服务器通过建立好的连接向SSH客户端发送支持的SSH版本信息。

2. SSH客户端收到版本信息后,根据自身支持的SSH版本决定使用的版本号,并将决定使用的版本号发送给SSH服务器。

3. SSH服务器判断自己是否支持客户端决定使用的版本号,从而确定版本协商是否成功。

算法协商

SSH工作过程中需要使用多种类型的算法,包括用于产生会话密钥的密钥交换算法、用于数据信息加密的对称加密算法、用于进行数字签名和认证的公钥算法和用于数据完整性保护的HMAC算法。SSH服务器和客户端对每种类型中具体算法的支持情况不同,因此双方需要协商确定每种类型中最终使用的算法,过程如下:

1. SSH服务器和客户端分别向对方发送自己支持的算法。

2. SSH服务器和客户端依次协商每种类型中具体使用的算法。在每类算法的协商过程中,SSH服务器和客户端都会匹配出双方均支持的算法作为最终使用的算法。每类算法均匹配成功后,算法协商完成。如果某类算法全部匹配失败,则该类型的算法协商失败,这会导致SSH服务器和客户端之间算法协商失败并断开连接。

密钥交换

SSH服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。

由于SSH服务器和客户端需要持有相同的会话密钥用于后续的对称加密,为保证密钥交换的安全性,SSH使用一种安全的方式生成会话密钥,由SSH服务器和客户端共同生成会话密钥,利用数学理论巧妙地实现不直接传递密钥的密钥交换,无需通过不安全通道传送该密钥,具体过程如下图所示。


SSH密钥交换

1. SSH服务器生成素数G、P、服务器私钥b,并计算得到服务器公钥y=(G^b)%P。

2. SSH服务器将素数G、P、服务器公钥y发送给SSH客户端。

3. SSH客户端生成客户端私钥a,计算得到客户端公钥x=(G^a)%P。

4. SSH客户端将客户端公钥x发送给SSH服务器。

5. SSH服务器计算得到对称密钥K=(x^b)%P,SSH客户端计算得到对称密钥K=(y^a)%P,数学定律可以保证SSH服务器和SSH客户端生成的对称密钥相同。

用户认证

SSH客户端向SSH服务器发起认证请求,SSH服务器对SSH客户端进行认证。SSH支持以下几种认证方式:

  • 密码(password)认证:客户端通过用户名和密码的方式进行认证,将加密后的用户名和密码发送给服务器,服务器解密后与本地保存的用户名和密码进行对比,并向客户端返回认证成功或失败的消息。
  • 密钥(publickey)认证:客户端通过用户名,公钥以及公钥算法等信息来与服务器进行认证。
  • password-publickey认证:指用户需要同时满足密码认证和密钥认证才能登录。
  • all认证:只要满足密码认证和密钥认证其中一种即可。

SSH用户认证最基本的两种方式是密码认证和密钥认证。密码认证方式比较简单,且每次登录都需要输入用户名和密码。而密钥认证可以实现安全性更高的免密登录,是一种广泛使用且推荐的登录方式。

密码认证

密码认证的基本原理是SSH客户端使用服务器公钥对密码进行加密,SSH服务器使用服务器私钥解密后验证密码的合法性,具体过程如下图所示。


SSH密码认证登录流程

1. SSH客户端向SSH服务器发送登录请求。

2. SSH服务器将服务器公钥发送给SSH客户端。

3. SSH客户端输入密码,使用服务器公钥加密密码后发送给SSH服务器。

4. SSH服务器收到密文,使用服务器私钥解密得到密码。验证密码是否正确,如果正确则认证通过。

但是,这种认证方式存在中间人攻击的风险,如果有人截获了SSH客户端的登录请求后,冒充SSH服务器将伪造的公钥发送给SSH客户端,就可以获取到用户的登录密码。所以,在首次登录SSH服务器时,SSH客户端上会提示公钥指纹,并询问用户是否确认登录。用户确认后公钥将被保存并信任,下次访问时,SSH客户端将会核对SSH服务器发来的公钥和本地保存的是否相同。这种方式适用于公布了公钥指纹的SSH服务器以及已登录过正确SSH服务器的SSH客户端。

密钥认证

为避免中间人攻击,可以使用安全性更高的密钥认证。密钥认证的基本原理是SSH服务器使用客户端的公钥对随机内容加密,SSH客户端使用自己的私钥解密并发送给服务器以证实自己的身份,具体的过程如下图所示。


SSH密钥认证登录流程

1. 在进行SSH连接之前,SSH客户端需要先生成自己的公钥私钥对,并将自己的公钥存放在SSH服务器上。

2. SSH客户端向SSH服务器发送登录请求。

3. SSH服务器根据请求中的用户名等信息在本地搜索客户端的公钥,并用这个公钥加密一个随机数发送给客户端。

4. SSH客户端使用自己的私钥对返回信息进行解密,并发送给SSH服务器。

5. SSH服务器验证SSH客户端解密的信息是否正确,如果正确则认证通过。

会话请求

认证通过后,SSH客户端向服务器发送会话请求,请求服务器提供某种类型的服务,即请求与服务器建立相应的会话。服务器根据客户端请求进行回应。

会话交互

会话建立后,SSH服务器端和客户端在该会话上进行数据信息的交互,双方发送的数据均使用会话密钥进行加解密。

常用SSH连接工具:PuTTY和OpenSSH

由于SSH是一套协议标准,需要依赖基于SSH实现的工具完成SSH客户端和SSH服务器之间的连接,PuTTY和OpenSSH应运而生。

PuTTY是Windows上经典的免费SSH连接工具,通常用于使用SSH协议远程登录设备,最新版本可以在PuTTY下载。

OpenSSH是SSH协议的开源实现,支持在Unix操作系统上运行,最新版本可以在OpenSSH下载。目前Windows10已经包含OpenSSH客户端和服务器软件,可在“设置—应用—应用与功能—可选功能”中搜索安装。

SSH和SSL的区别

SSH和SSL都是网络安全协议,通过加密和认证提升两台设备间传输数据的安全性。但SSH和SSL的生效方式和服务目标存在差异。

SSH在两台设备间创建安全隧道,使这两台设备间可以安全地发送命令、传输数据等。例如,客户端通过SSH远程登录到一台服务器上,就可以安全地远程管理这台服务器,在服务器上执行想要的命令。

SSL则是使用SSL证书保证两台设备间安全地传输数据,而不是像SSH那样可以执行命令。例如,用户通过浏览器访问某安装了SSL证书且启用了HTTPS的服务器,浏览器和服务器之间可以安全地传输数据。

SSH就像一辆汽车,我们看不到这辆封闭的汽车里装载的是什么。而SSL就像一个封闭的集装箱,我们可以用不同的交通工具运输它,但看不到集装箱里装的是什么。

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

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

相关文章

植物病虫害:YOLO水稻虫害识别数据集(6类,五千余张图像,标注完整)

YOLO水稻虫害识别数据集,包含褐飞虱,绿叶蝉,正常叶片,稻虫,二化螟,蝇蛆6个类别,共五千余张图像,yolo标注完整。 适用于CV项目,毕设,科研,实验等 …

uniapp微信小程序获取当前位置

uni-app微信小程序uni.getLocation获取位置;authorize scope.userLocation需要在app.json中声明permission;小程序用户拒绝授权后重新授权-CSDN博客

AIOPS:Zabbix结合讯飞星火做自动化告警+邮件通知并基于人工智能提供解决方案

目前Zabbix官方已经提供Zabbix+ChatGPT的解决方案 ChatGPT一周年,你充分利用了吗?Zabbix+ChatGPT,轻松化解告警! 但是由于需要魔法等其他因素,比较不稳定,遂决定使用国内模型,这里我挑选的是讯飞星火,基于我之前的文档,在此基础上通过Zabbix的告警脚本实现调用AI模型…

安装及管理docker

文章目录 1.Docker介绍2.Docker安装3.免sudo设置4. 使用docker命令5.Images6.运行docker容器7. 管理docker容器8.创建image9.Push Image 1.Docker介绍 Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机&#…

[LeetCode][102]二叉树的层序遍历——遍历结果中每一层明显区分

题目 102. 二叉树的层序遍历 给定二叉树的根节点 root,返回节点值的层序遍历结果。即逐层地,从左到右访问所有节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入…

HDLBits刷题Day24,3.2.5.9 Design a Moore FSM

3.2.5.9 Design a Moore FSM 问题描述 分析: 1.s000时,打开fr1,fr2,fr3和补充水dfr 2.s001时,打开fr1,fr2 3.s011时,打开fr1 4.s111时,关闭 5.当水位下降时,打开dfr 绘制一下状态转移图 代码&#xff1a…

Qt Creator常见问题解决方法

Qt Creator源文件重命名的正确方法 光改文件名是不够的,还要在.pro文件中的SOURCES中把名字改成之后的。 中文乱码(字符集设置) 菜单栏-工具-选项-设置为utf-8

“Sora和Claude”大模型突起,普通人在AI人工智能赛道有哪些机遇?

文丨微三云营销总监胡佳东,点击上方“关注”,为你分享市场商业模式电商干货。 - 引言:去年时至今日百模大战,行业大模型一直是焦点的所在,简单来说就是“提供一个问题”或者“发布一个任务”他会根据你的指令&#x…

机器学习--循环神经网络(RNN)1

一、简介 循环神经网络(Recurrent Neural Network)是深度学习领域中一种非常经典的网络结构,在现实生活中有着广泛的应用。以槽填充(slot filling)为例,如下图所示,假设订票系统听到用户说&…

PyTorch基础(20)-- torch.gt() / torch.ge() / torch.le() / torch.lt()方法

一、前言 嗯……最近遇到的奇奇怪怪的方法很多了,学无止境啊!学不完啊,根本学不完!本篇文章介绍四个方法:torch.gt()、torch.ge()、torch.le()和torch.lt()方法,由于这四个方法很相似,所以放到…

【ebpf pwn】D^3CTF2022 -- d3bpf/d3bpf-v2

文章目录 前言d3bpfd3bpf-v2泄漏 map_addr泄漏 koffset任意地址读写 前言 题目链接 虽然 ebpf 的利用热潮已经过去,但是作为一个刚刚接触内核利用的菜鸡,还是觉得有必要学习学习 ebpf 相关的漏洞利用,当然笔者不会在此花费太多时间&#xf…

CLion中常用快捷键(仍适用其他编译软件)

基本编辑操作: 复制:Ctrl C粘贴:Ctrl V剪切:Ctrl X撤销:Ctrl Z重做:Ctrl Shift Z (不小心撤销了 需要返回之前的操作 相当于下一步)全选:Ctrl A 导航&#xff1…

day18_支付宝支付项目部署(保存支付信息,支付接口,支付宝异步回调)

文章目录 1 支付1.1 需求说明1.2 支付宝支付1.2.1 产品介绍产品特色使用示例申请条件费率 1.2.2 接入准备1.2.3 手机网站支付快速接入1.2.4 官方demo研究 1.3 环境搭建(service-pay)1.4 后端接口1.4.1 保存支付信息实现流程说明查询订单接口开发openFeign接口定义代码实现添加依…

【重温设计模式】备忘录模式及其Java示例

备忘录模式的概述 在软件设计的世界中,备忘录模式是一种行为设计模式,它的主要作用是保存对象的当前状态,以便在将来的某个时间点,可以将对象恢复到这个保存的状态。这种模式的命名源于生活中的备忘录,我们常常用它来…

P1914 小书童——凯撒密码

题目描述&#xff1a; AC代码&#xff1a; #include<iostream> #include<cstring>using namespace std;int main() {int n;scanf("%d",&n);string str;cin >> str;//字符串密码输入 for(int i0;i<str.size();i) //遍历字符串中的字符使其…

Unity的PICO项目基础环境搭建笔记(调试与构建应用篇)

文章目录 前言一、为设备开启开发者模式1、开启PICO VR一体机。前往设置>通用>关于本机>软件版本号2、一直点击 软件版本号 &#xff0c;直到出现 开发者 选项3、进入 开发者模式&#xff0c;打开 USB调试&#xff0c;选择 文件传输 二、实时预览应用场景1、下载PC端的…

Apache的运用与实战

WEB服务器 1、WEB服务简介 # 目前最主流的三个Web服务器是Apache、Nginx、 IIS。 - WEB服务器一般指网站服务器&#xff0c;可以向浏览器等Web客户端提供网站的访问&#xff0c;让全世界浏览。 - WEB服务器也称为WWW(WORLD WIDE WEB)服务器&#xff0c;主要功能是提供网上信息…

【Java - 框架 - Mybatis】(01) 普通Java项目使用Mybatis操作Mysql - 快速上手

普通Java项目使用Mybatis操作Mysql - 快速上手 说明 通过软件"IntelliJ IDEA"创建"Maven"项目完成&#xff1b;通过"Mybatis"框架操纵"MySQL"数据库完成操作&#xff1b; 环境 Java版本"1.8.0_202"&#xff1b;Windows …

python 的zip函数的用法

目录 简介 示例 例子1 例子2 例子3 简介 zip在英语里的意思是拉链。想象两个列表&#xff08;或任何可迭代的容器&#xff09;&#xff0c;a和b。两者各自有若干元素。zip的输入变量就是两个可迭代的容器&#xff0c;zip的返回值也是一个容器&#xff0c;容器的每个元素都…

《JAVA与模式》之不变模式

系列文章目录 文章目录 系列文章目录前言一、不变模式的结构二、不变模式在JAVA中的应用三、不变模式的优点和缺点前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 …