SSH:加密安全访问网络的革命性协议

目录

博客前言

一.ssh介绍

1.为什么需要SSH?

2.SSH是如何工作的?

连接建立

版本协商

算法协商

密钥交换

用户认证

会话请求

会话交互

3.SSH和SSL的区别

二.实战(centos配置密钥)

2.1.ssh/里面的文件作用解释

2.1 配置SSH,打开秘钥登录功能、关闭密码登录功能(管理员做) 

2.2 生成密钥对

2.4在服务器上安装公钥


博客前言

在现代信息化的世界中,数据传输和网络连接的安全性是至关重要的。SSH(Secure Shell)协议作为保障网络通信安全的重要工具,在网络安全领域扮演着至关重要的角色。本文将深入探讨SSH

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

一.ssh介绍

1.为什么需要SSH?

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

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

2.SSH是如何工作的?

SH由服务器和客户端组成,为建立安全的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服务器和客户端共同生成会话密钥,利用数学理论巧妙地实现不直接传递密钥的密钥交换,无需通过不安全通道传送该密钥,具体过程如下图所示。

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客户端使用自己的私钥解密并发送给服务器以证实自己的身份,具体的过程如下图所示。

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

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

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

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

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

会话请求

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

会话交互

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

3.SSH和SSL的区别

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

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

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

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

协议的工作原理、应用场景以及它如何重塑我们对网络安全的认知。

二.实战(centos配置密钥)

2.1.ssh/里面的文件作用解释

id_rsa :私钥,别台机器想登录你,你就把私钥发给它
id_rsa.pub :为公钥,你想登录别台机器,你就把公钥发给他,并叫他安装到authorized_keys
authorized_keys: 里面记录了服务器授权的所有公钥
known_hosts:ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。

当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

2.1 配置SSH,打开秘钥登录功能、关闭密码登录功能(管理员做) 

编辑 /etc/ssh/sshd_config

sudo vim /etc/ssh/sshd_config
RSAAuthentication yes 
PubkeyAuthentication yes

##此处便已经设置好了使用秘钥登录了,但是如果需要禁用密码登录可以进行如下设置:
PasswordAuthentication no

保存退出

重启服务
service sshd restart

 

2.2 生成密钥对


密钥对的生成在本地电脑或者服务器都可以。

  • 如果,你想不同服务器共用一个密钥对,那建议在本地电脑生成,之后将公钥上传到服务器并安装就行。
  • 如果,你想不同服务器使用不同的密钥对,那无所谓。

这边以服务器端生成密钥对举例,客户端也一样,比如windows打开cmd输入命令就行。
首先登录到服务器后,在命令行输入命令,然后一路回车就行。

##生成秘钥
ssh-keygen

 

第一步是确认保存秘钥的位置,一般使用默认的位置即可。
第二步是为秘钥设置一个密码, 第三步是确认密码。如果输入的话,即使被人有你的秘钥没有你的密码也是无法登录你的服务器的,这样会比较保险但也比较繁琐,直接回车表示不设置密码。
后面的信息是给出秘钥、公钥保存的位置和秘钥信息。
最终我们可以看到在/root/.ssh/目录中生成了一个隐藏目录 .ssh,里面包含两个密钥文件,id_rsa 为私钥,id_rsa.pub 为公钥。


2.4在服务器上安装公钥

首先进入 /root/.ssh/,如果没有./ssh,那就创建;

如果没有id_rsa.pub,那就上传到该目录。
然后在命令行输入以下命令安装公钥,其实就是将id_rsa.pub的内容添加到authorized_keys

cd ~/.ssh 
cat id_rsa.pub >> authorized_keys

如此便完成了公钥的安装。 此外,为了确保连接成功,输入如下指令以保证以下文件权限正确:(可以不做)
chmod 600 authorized_keys  chmod 700 ~/.ssh

 

2.5登录(xshell)

 

 

 

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

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

相关文章

【C++】std::variant

上一篇文章讲到了 union,union union存在很多问题,因此C17设计了一个新的variant替代原来的union。 union的问题 无法知道当前使用的类型是什么。而且union无法自动调用底层数据成员的析构函数。 这些使得一般只对一些“基本类型”使用union&#xf…

处理 Maven jar 包下载失败问题

目录 1、配置国内 Maven 源 配置和检测 settings.xml 配置国内源 2、删除本地 maven 创库的 jar 重新下载 3、其他问题 一般情况下 maven jar 包下载不成功可能有两种情况: 1)没有配置国内源 2)jar 包需要重新下载 下面详细讲解如何解决这两…

机器学习 | 利用Pandas进入高级数据分析领域

目录 初识Pandas Pandas数据结构 基本数据操作 DataFrame运算 文件读取与存储 高级数据处理 初识Pandas Pandas是2008年WesMcKinney开发出的库,专门用于数据挖掘的开源python库,以Numpy为基础,借力Numpy模块在计算方面性能高的优势&am…

【计网·湖科大·思科】实验二 计算机网络的寻址问题

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

物联网IOT: 风浆叶片拧紧装配及实时监测系统

某大型风电设备,通过机器人应用与精益化生产体系的融合,打造出行业领先的具备柔性生产能力的“脉动式”生产体系。同时在关键工序上。其中,在叶片装配等关键工序上使用由智能机器人代替人工,以提高生产的效率和装配质量可靠性,将六轴机器人、视觉系统、光电系统、液压、气动、伺…

RISC-V常用汇编指令

RISC-V寄存器表: RISC-V和常用的x86汇编语言存在许多的不同之处,下面将列出其中部分指令作用: 指令语法描述addiaddi rd,rs1,imm将寄存器rs1的值与立即数imm相加并存入寄存器rdldld t0, 0(t1)将t1的值加上0,将这个值作为地址,取…

科技助力“双碳”:墨水屏电子桌牌在绿色办公中的作用

随着科技的发展,人们对绿色环境可持续发展也越来越重视,所以,我国在几年前,就提出了“双碳”政策(即碳达峰与碳中和的简称。2020年9月中国明确提出2030年“碳达峰”与2060年“碳中和”目标),而作…

DNS欺骗

DNS(域名系统)作为当前全球最大 、最复杂的分布式层次数据库系统,具有着开放、庞大、复杂的特性。它为全球用户提供域名解析服务,是互联网的重要基础设施。但由于其在设计之初未考虑安全性、人为破坏等因素 ,DNS系统在互联网高度发达的今天面…

Python之数据可视化(地图)

目录 一 基础地图应用 二 全国疫情图 一 数据准备 二 数据处理 二 湖北省疫情图 一 数据准备 二 数据处理 一 基础地图应用 导入map地图对象 from pyecharts.charts import Map map Map() 写入数据 data [("北京市",100),("上海市"…

详细解读vcruntime140_1.dll修复的手段,如何快速解决vcruntime140_1.dll丢失问题

当出现“无法找到vcruntime140_1.dll”或程序“未能正常启动”时,这通常指示系统中缺失了一个关键文件:vcruntime140_1.dll。作为Visual C Redistributable组件的一部分,这个小文件在很多用Visual Studio编译的C程序运行时发挥着重要作用。解…

OJ_叠框问题

问题描述 c语言实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> using namespace std;int main() {int n; //存放外框尺寸int a,b; //存放两个字符char matrix[100][100] { 0 };//全部初始化为休止符/0while (scanf("%d %c %c&…

【开源】基于JAVA的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

IntelliJ IDEA 快捷键大全

IntelliJ IDEA 快捷键大全 一、文本编辑二、构建、编译项目 一、文本编辑 CtrlN 查找类 CtrlN 查找文件 CtrlF 查找文本 可以根据需求去选择红框内的选项 CtrlX 剪切 剪切选中文本&#xff0c;如果未选中则剪切当前行CtrlC 复制 复制选中文本&#xff0c;如果未选中则复制当前…

机房环境动力监控系统:S275远程控制网关助力高效管理

现场问题 1、机房安全隐患 机房存在意外断电、温湿度过高过低、漏水断路等隐患&#xff0c;传统监测手段难以提前发现和预警。 2、机房远程运维困难 因环境改变、非授权活动、设备状态变化等引起的事故&#xff0c;难以满足机房远程运维的可靠管控要求。 3、机房改造成本高…

数论Leetcode204. 计数质数、Leetcode858. 镜面反射、Leetcode952. 按公因数计算最大组件大小

Leetcode204. 计数质数 题目 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 代码 class Solution:def countPrimes(self, n: int) -> int:if n < 2:return 0prime_arr [1 for _ in range(n)]prime_arr[0], prime_arr[1] 0, 0ls list()for i in…

南方故乡吹来的风

故乡的风 - 张明敏 词&#xff1a;刘因国 曲&#xff1a;刘因国 南方故乡吹来的风 带着潮水的呼唤 吹着你的秀发 飘散着茉莉的香 茉莉的香哟 南方故乡吹来的风 带着渔船的归航 吹着你的欢畅 吹着渔帆点点醉哟 点点的醉哟 远方的姑娘 你是否听见 我的心在嘿哟 你…

缓存技术—redis

一、redis介绍 1.什么是NoSQL NosQL (Not-Only:sQL)&#xff0c;泛指非关系型的数据库(关系型数据库: 以二维表形式存储数据) 非关系型的数据库现在成了一个极其热门的新领域&#xff0c;发展非常迅速。而传统的关系数据库在应付超大规模和高并发的网站已经显得力不从…

设计模式-生成器设计模式

什么是生成器设计模式 众所周知我们设计代码的时候要将代码设计出模块化的&#xff0c;一个功能是一个模块&#xff0c;那么生成器设计模式&#xff0c;是将一个类再度进行了一个拆分&#xff0c;让一个类的内部进行了单一职责化&#xff0c;其实我们在平时开发的时候就会不经…

金智易表通构建学生缴费数据查询+帆软构建缴费大数据报表并整合到微服务

使用金智易表通挂接外部数据,快速建设查询类服务,本次构建学生欠费数据查询,共有3块设计,规划如下: 1、欠费明细查询:学校领导和财务处等部门可查询全校欠费学生明细数据;各二级学院教职工可查询本二级学院欠费学生明细数据。 2、大数据统计报表:从应收总额、欠费总额…

Debezium发布历史90

原文地址&#xff1a; https://debezium.io/blog/2020/04/09/using-debezium-with-apicurio-api-schema-registry/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 将 Debezium 与 A​​picurio API 和架构注册表…