SSH 协议基础

SSH远程连接服务详解 详细介绍远程登录连接,概念,基于口令的认证;基于秘钥认证,各种免密登录实例详解 阅读详情

SSH的英文全称为Secure Shell,是IETF(Internet Engineering Task Force)的Network Working Group所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。 我们可以简单理解为:Rlogin和Telnet等的替代方案。SSH的使用场景如下图所示,具体请参考下文SSH的框架。

 

 

SSH 基本框架

SSH协议框架中最主要的部分是三个协议:

  • 传输层协议
  • 用户认证协议
  • 连接协议
    同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图来表示:
  • 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;
  • 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
  • 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

 

SSH安全验证级别

  • 第一种级别(基于口令的安全验证),只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
  • 第二种级别(基于密匙的安全验证)需要依靠密匙
    • 先为自己创建一对密匙,并把公匙放在需要访问的服务器上;
    • 客户端软件会向服务器发出请求,请求用你的密匙进行安全验证;
    • 服务器收到请求之后,在该服务器目录下寻找公匙,然后把它和你发送过来的公匙进行比较。若两密匙一致,服务器就用公匙加密“质询”(challenge)并把它发送给客户端软件;
    • 客户端软件收到“质询”之后就可以用 私密 解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令,它不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。

 

SSH 的工作过程

 

在整个通讯过程中,为实现 SSH的安全连接,服务器端与客户端要经历如下五个阶段:

  • 版本号协商阶段,SSH目前包括 SSH1和SSH2两个版本, 双方通过版本协商确定使用的版本
  • 密钥和算法协商阶段,SSH支持多种加密算法, 双方根据本端和对端支持的算法,协商出最终使用的算法
  • 认证阶段,SSH客户端向服务器端发起认证请求, 服务器端对客户端进行认证
  • 会话请求阶段, 认证通过后,客户端向服务器端发送会话请求
  • 交互会话阶段 ,会话请求通过后,服务器端和客户端进行信息的交互 

1 . 版本号协商阶段

  1. 服务器打开端口 22,等待客户端连接。
  2. 客户端向服务器端发起 TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>-<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。
  3. 客户端收到报文后,解析该数据包,如果服务器端的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。
  4. 客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。
  5. 如果协商成功,则进入密钥和算法协商阶段,否则服务器端断开 TCP连接。

Note: 版本号协商阶段报文都是采用明文方式传输的。

2. 密钥和算法协商阶段

  1. 服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等;
  2. 服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。
  3. 服务器端和客户端利用 DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话 ID。 

    通过以上步骤,服务器端和客户端就取得了相同的会话密钥和会话ID。
    • 对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全
    • 在认证阶段,两端会使用会话 ID用于认证过程。 
      Note:

             在协商阶段之前,服务器端已经生成 RSA或 DSA密钥对,他们主要用于参与会话密钥的生成。

3. 认证阶段

  1. 客户端向服务器端发送认证请求,认证请求中包含用户名、认证方法、与该认证方法相关的内容(如:password认证时,内容为密码)。
  2. 服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。
  3. 客户端从认证方法列表中选取一种认证方法再次进行认证。
  4. 该过程反复进行, 直到认证成功或者认证次数达到上限, 服务器关闭连接为止。
SSH提供两种认证方式:

 

  1. password认证:客户端向服务器发出 password认证请求,将用户名和密码加密后发送给服务器;服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。
  2. publickey 认证:采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。客户端发送包含用户名、公共密钥和公共密钥算法的 publickey 认证请求给服务器端。服务器对公钥进行合法性检查,如果不合法,则直接发送失败消息;否则,服务器利用数字签名对客户端进行认证,并返回认证成功或失败的消息

 

SSH2.0还提供了 password-publickey 认证和 any 认证:

 

  1. password-publickey 认证:指定该用户的认证方式为 password 和 publickey认证同时满足。客户端版本为 SSH1的用户只要通过其中一种认证即可登录;客户端版本为 SSH2的用户必须两种认证都通过才能登录。
  2. any认证:指定该用户的认证方式可以是 password,也可以是 publickey。

 

4.会话请求阶段

  1. 服务器等待客户端的请求;
  2. 认证通过后,客户端向服务器发送会话请求;
  3. 服务器处理客户端的请求。请求被成功处理后, 服务器会向客户端回应 SSH_SMSG_SUCCESS包,SSH进入交互会话阶段;否则回应 SSH_SMSG_FAILURE包,表示服务器处理请求失败或者不能识别请求。

5.交互会话阶段

在这个模式下,数据被双向传送:

  1. 客户端将要执行的命令加密后传给服务器;
  2. 服务器接收到报文,解密后执行该命令,将执行的结果加密发还给客户端;
  3. 客户端将接收到的结果解密后显示到终端上.

6.SSH Q & A

Q1: SSH的版本和区别。

SSH2避免了RSA的专利问题,并修补了CRC的缺陷。SSH2用数字签名算法(DSA)和Diffie-Hellman(DH)算法代替RSA来完成对称密钥的交换,用HMAC来代替CRC。同时SSH2增加了AES和Twofish等对称加密算法。

A1: SSH(Secure SHell)到目前为止有两个不兼容的版本——SSH1和SSH2。SSH1又分为1.3和1.5两个版本。SSH1采用DES、3DES、Blowfish和RC4等对称加密算法保护数据安全传输,而对称加密算法的密钥是通过非对称加密算法(RSA)来完成交换的。SSH1使用循环冗余校验码(CRC)来保证数据的完整性,但是后来发现这种方法有缺陷。

 

更多内容请参考The SSHv1 Protocol & The SSHv2 Protocol

 

Q2: 什么是HMAC?

A2: HMAC(Hash Message Authentication Code) ,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

 

Q3: 什么是X11 forwarding?

A3: sh的X11 forwarding特性可以使X client和X server安全地通讯。使用X11 forwarding后,从X client到X Server方向的数据先被送至ssh server,ssh server利用和ssh client的安全通道转发给ssh client,再由ssh client转发给X server,从X server到X client的数据流同理。这里ssh server和ssh client充当了X client和X server间数据的转发器,由于ssh server和X client、ssh client和X server一般在同一台机器上,它们之间是一种安全的进程间通讯,而ssh server和ssh client间的通讯也是安全的,所以X client和X server间的通讯就是安全的。

 

Q4: 什么是TTY?

A4: 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是 Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机,是由Teletype公司生产的。设备名放在特殊文件目录/dev/下。

 

Q5: 简单描述下SSH运行的过程?

 

A5:简要过程如下:

  • Client端向Server端发起SSH连接请求。
  • Server端向Client端发起版本协商。
  • 协商结束后Server端发送Host Key公钥 Server Key公钥,随机数等信息。到这里所有通信是不加密的。
  • Client端返回确认信息,同时附带用公钥加密过的一个随机数,用于双方计算Session Key。
  • 进入认证阶段。从此以后所有通信均加密。
  • 认证成功后,进入交互阶段。

 

ssh工作流程(工作原理) 目录 ssh简介 加密的方式 ssh工作流程 1.版本号协商 2.密钥和算法协商 产生会话密钥的流程: 认证阶段 基于口令的认证: 基于公钥的认证:免密登录 ssh简介 ssh: secure shell protocol 安全的壳程序协议。ssh会对我们的传输进行加密。 提供了两个服务: ssh远程登录的服务,sftp传输文件的服务 加密的方式 1.对称加密:使用同一个密钥进行加密和解密 ​ 有一个密钥key,加密的数据 name=user password=12345. 阅读详情

相关推荐

网络基础协议理论(SSH协议)

SSH协议,全称为安全外壳协议(Secure Shell Protocol),是一种网络协议,旨在在不安全的网络中为计算机之间提供安全的加密通信。

2301_77292637的博客 1726

SSH协议交互过程

一、什么是SSH   SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、甚至为PPP提供一个安全的"通道"。

kluleia的专栏 1万+

linux系列小知识-手把手教你SSH怎么链接

这是版本不对,建议更新版本,或者使用XSHELL进行连接。首先第一步:安装必要的软件,CRT或者XSHELL。1.根据要求,使用网口将两个主机的IP地址设置完成。正常连接器时会显示输入密码,此时只要输入密码即可。下面将举实际案例,手把手搭建SSH链接。然后输入密码即可登录。IP地址设置要求在同一网段。然后就可以正确的进入到调试界面了。2.CRT及XSHELL的配置。点击连接时会出现以下错误:、此时会显示登录用户名,

whm128的博客 4086

网络协议-SSH

握手阶段密钥交换阶段用户认证阶段会话建立阶段SSH协议通过握手、密钥交换、用户认证和会话建立等阶段,确保了远程连接的安全性。使用公钥认证方式可以进一步提高安全性,减少每次手动输入密码的需求。通过上述步骤,您可以理解和实现SSH协议的安全通信过程。

weixin_43215013的博客 1354

Git基础:掌握Git、GitHub及SSH协议

htmltable {th, td {th {pre {简介:Git是一个分布式版本控制系统,而GitHub是一个提供Git仓库托管服务的云平台,它们通过SSH协议实现安全的身份验证和代码管理。本文详细介绍了Git的核心概念,包括仓库、提交、分支、合并、克隆、拉取和推送等,并解释了GitHub的项目管理特性如fork、pull request、Issue、Wiki和项目板等。同时,文章还阐述了SSH协议的作用和使用方法,强调了这些技术在提升团队协作效率方面的重要性。

weixin_35829279的博客 901

CCS软件仿真插件移植避坑指南:从CCS5.5到7.4的完整流程

本文详细介绍了将CCS软件仿真插件从CCS5.5迁移至CCS7.4的完整流程与避坑指南。针对TMS320F28335等C2000系列芯片,重点解析了仿真核心文件、配置数据库、连接定义及驱动文件的移植步骤,并通过两个实战Demo验证了移植后仿真环境的可用性,帮助开发者在无硬件条件下继续高效进行算法验证与调试。

defi6farmer的博客 456

Linux基础操作及SSH协议的概述

Linux基础操作 网络相关配置 通过对Linux系统的熟悉,今天来简要介绍一下Linux的常见的基础操作,以及对SSH协议的认识。 1、查看当前机的IP地址配置 2、修改网络配置 3、重启网络服务 systemctl restart network 4、测试连通状态 ping www.baidu.com 5、虚拟机额外配置 5.1、虚拟机网络设置为桥接方式 5.2、设置虚拟机net0的网卡为无线网卡 注意:实体机直接安装无序5配置 基础练习 su - username高级用户切换到低级用户不需要密码,

weixin_53869835的博客 406

SECS/GEM协议库及开源代码

以下是在开发SECS/GEM协议过程中,在网络上搜集协议实现资源,希望对SECS/GEM协议感兴趣的同学能有所帮助。 开源代码 freesecs FREESECS 是一个开源的SEMI SECS协议库,采用C++语言实现,可运行于Linux, MacOS X, NetBSD。 实现协议:E37.1、E5 开源地址:freesecs download | SourceForge.net 下载地址:https://download.youkuaiyun.com/download/BT_LEO/24305429

码农的历程 9943

SSH协议基础学习

需要借助Xshell来管理阿里云服务器,SSH协议又是Xshell实现的基础,因此了解一下SSH协议。 SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。 SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现(Xshell工具免费版)。 中间人攻击 SSH之所以能够...

Time Will Tell 380

C#实践项目1

需求: 在CAD内实现两个坐标系的转换。 转换方式为文件内的所有图形从一个坐标系下的坐标,转换到另一个坐标系下的坐标。 进行坐标转换后,仅仅是坐标发生改变,图层、样式等等不会发生变化。

weixin_51182789的博客 5325

DNF单机版搭建全攻略:从零开始到局域网联机(含常见问题解决)

本文提供详细的DNF单机版搭建指南,从环境配置到局域网联机设置,涵盖服务端安装、数据库配置及常见问题解决方案。适合新手和有经验的玩家,帮助快速搭建专属游戏服务器,重温经典游戏体验。

weixin_30832143的博客 847

SSH协议基础

SSH的英文全称为Secure Shell,是IETF(Internet Engineering TaskForce)的Network WorkingGroup所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。我们可以简单理解为:Rlogin和Telnet等的替代方案。SSH的使用场景如下图所示,具体请参考下文SSH的框架。 协议基础" height="502" w

I'm Hugo 964

小米路由器R1D进阶玩法:MIXBOX工具箱安装与插件管理指南

本文详细介绍了为小米路由器R1D安装MIXBOX工具箱的完整指南。通过开启SSH、执行一键安装脚本,用户可以轻松解锁路由器的进阶功能,如安装离线下载、内网穿透等插件,从而将旧设备转变为强大的家庭网络服务中心。

weixin_29292431的博客 1114

SSH协议基础详解

SSH全称Secure Shell,即安全外壳协议,是一套运行在应用层的加密远程访问协议,专门用于在公共、不安全的网络环境中安全操控远程主机、虚拟机。打开Xftp软件,点击「新建」,会话参数和Xshell完全一致:填写虚拟机IP、端口22、登录用户名与密码,保存会话配置。- 拖拽传输:软件左侧是Windows本地文件目录,右侧是Linux虚拟机目录,直接拖拽文件或文件夹,即可完成上传、下载;Xftp是和Xshell配套的SFTP文件传输工具,复用SSH的22端口,无需额外开放端口,传输文件全程加密。

2601_96463880的博客 173

2025爬虫实战:某音直播间实时弹幕获取原理及源码分析

某音直播弹幕虽然没有直接挂在 DOM 上,但由于用的是西瓜播放器,弹幕是通过 JS 接口动态渲染的,这就给了我们 Hook 的机会。关键点是找到调用的位置,然后拦截并输出对象里的message字段。这个思路其实也适用于其他前端渲染的播放器,比如 B 站的 DPlayer、HLS.js、甚至很多自研播放器都有类似结构。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1813

【异常】OpenClaw 项目 `fetch failed` 报错问题排查与解决方案Response interrupted: TypeError: fetch failed

针对无超时控制、异常兜底缺失导致的请求中断,封装标准化的安全请求工具,一次性解决超时控制、异常捕获、日志埋点三大问题,全项目替换原生。:将项目运行的 Node.js 版本升级至 18.x 及以上 LTS 版本,使用 Node.js 内置的稳定版。实现的网络请求环节,包括但不限于:第三方开放接口调用、内部服务接口通信、跨域资源请求、外部配置拉取等场景。:针对无法升级 Node.js 版本的存量环境,通过社区稳定兼容包替换原生。类型异常,直接造成业务请求响应中断。第二步:业务代码改造,替换原生。

奶爸的编程之路,也就一周冷个三天 367

Linux学习记录(17)SSH协议及Linux日志基础

今天学习了Linux的SSH协议部分和日志基础的知识。 1、SSH协议 所谓SSH协议,就是一种在计算机之间互相通信的协议,比如我们在项目中经常使用XManager之类的管理工具,就是使用SSH协议去远程连接Linux服务器的。要注意SSH是一个协议,不是一个具体的东西,只是一些规定。而一般在CentOS或其他Linux下,openSSH是SSH协议的一个实现,是一个具体的程序,要搞清这两者之

Zhengw博客专栏 831

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3805

所有Linux工程师必须会的SSH协议及基础实验配置

SSH(Secure Shell) ⭐ 是一种安全通道协议,对通信数据进行了加密处理,用于远程管理 OpenSSH 服务名称:sshd 服务端主程序:/usr/sbin/sshd 服务端配置文件:/etc/ssh/sshd_config 服务器监听选项 端口号、协议版本、监听IP地址 禁用反向解析 配置文件:vi  /etc/ssh/sshd_config 服务器角色详解 ssh服务器 192.168.1.100 ssh客户机 192.168.1.101 配置更改 port &nb

empty_csx的博客 2199

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 用python做域名分析工具
下一篇: SSH使用Publickey模式登陆DGS3100
0x16
博客等级 码龄20年 79粉丝 50原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值