SSH协议详解

本文详细介绍了SSH的基本概念、工作原理及应用场景,包括SSH协议的版本、密钥机制、工作过程等内容。

转发的http://blog.youkuaiyun.com/macrossdzh/article/details/5691924

很透彻啊,学习了

一、什么是SSH

 

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

 

二、SSH 基本框架

 

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

 

* 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;

* 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;

* 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

 

同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图来表示:

三、主机密钥机制

 

对于SSH这样以提供安全通讯为目标的协议,其中必不可少的就是一套完备的密钥机制。由于SSH协议是面向互联网网络中主机之间的互访与信息交换,所以主机密钥成为基本的密钥机制。也就是说,SSH协议要求每一个使用本协议的主机都必须至少有一个自己的主机密钥对,服务方通过对客户方主机密钥的认证之后,才能允许其连接请求。一个主机可以使用多个密钥,针对不同的密钥算法而拥有不同的密钥,但是至少有一种是必备的,即通过 DSS算法产生的密钥。关于DSS算法,请参考[FIPS-186]。

 

SSH协议关于主机密钥认证的管理方案有两种,如下图所示:

每一个主机都必须有自己的主机密钥,密钥可以有多对,每一对主机密钥对包括公开密钥和私有密钥。在实际应用过程中怎样使用这些密钥,并依赖它们来实现安全特性呢?如上图所示,SSH协议框架中提出了两种方案。

 

在第一种方案中,主机将自己的公用密钥分发给相关的客户机,客户机在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确定客户机的可靠身份。在图2(a)中可以看到,用户从主机A上发起操作,去访问,主机B和主机C,此时,A成为客户机,它必须事先配置主机B和主机C的公开密钥,在访问的时候根据主机名来查找相应的公开密钥。对于被访问主机(也就是服务器端)来说则只要保证安全地存储自己的私有密钥就可以了。

 

在 第二种方案中,存在一个密钥认证中心,所有系统中提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户机的主机则只要保存一份认证中心的公开 密钥就可以了。在这种模式下,客户机在访问服务器主机之前,还必须向密钥认证中心请求认证,认证之后才能够正确地连接到目的主机上。

 

很 显然,第一种方式比较容易实现,但是客户机关于密钥的维护却是个麻烦事,因为每次变更都必须在客户机上有所体现;第二种方式比较完美地解决管理维护问题, 然而这样的模式对认证中心的要求很高,在互联网络上要实现这样的集中认证,单单是权威机构的确定就是个大麻烦,有谁能够什么都能说了算呢?但是从长远的发 展来看,在企业应用和商业应用领域,采用中心认证的方案是必要的。

 

另外,SSH协议框架中还允许对主机密钥的一个折中处理,那就是首次访问免认证。首次访问免认证是指,在某客户机第一次访问主机时,主机不检查主机密钥,而向该客户都发放一个公开密钥的拷贝,这样在以后的访问中则必须使用该密钥,否则会被认为非法而拒绝其访问。

 

 

 

四、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. 客户端将接收到的结果解密后显示到终端上.

 

 

 

 

 

五、SSH的应用

  

    首先,SSH最常见的应用就是,用它来取代传统的Telnet、FTP等网络应用程序,通过SSH登录到远方机器执行你想进行的工作与命令。在不安全的网路通讯环境中,它提供了很强的验证(authentication)机制与非常安全的通讯环境。实际上,SSH开发者的原意是设计它来取代原UNIX系统上的rcp、rlogin、rsh等指令程序的;但经过适当包装后,发现它在功能上完全可以取代传统的Telnet、FTP等应用程序。

    传统 BSD 风格的 r 系列指令(如 rcp,rsh,rlogin)往往都被视为不安全的,很容易就被各种网络攻击手段所破解,几乎所有找得到有关UNIX安全的书或文件,都会一而再、再而三地警告系统管理者,留心r系列指令的设定,甚至要求系统管理者将r系列指令通通关闭。

    而用来替代r系列指令的SSH,则在安全方面做了极大的强化,不但对通讯内容可以进行极为安全的加密保护,同时也强化了对身份验证的安全机制,它应用了在密码学(Cryptography)中已发展出来的数种安全加密机制,如 Symmetric Key Cryptography,Asymmetric Key Cryptography, One-way Hash Function,Random-number Generation等,来加强对于身份验证与通讯内容的安全保护。通讯时资料的加密有IDEA,three-key triple DES,DES,RC4-128,TSS,Blowfish 等数种多种安全加密算法可供选择,加密的key则是通过 RSA 进行交换的。资料的加密可以对抗IP spoofing,RSA这种非对称性的加密机制则可用来对抗DNS spoofing与IP routing spoofing,同时RSA也可以进行对主机身份的验证。

    其次,通过使用用SSH可以在本地主机和远程服务器之间设置"加密通道",并且这样设置的"加密通道"可以跟常见的Pop应用程序、X应用程序、Linuxconf应用程序相结合,提供安全保障。

    SSH的"加密通道"是通过"端口转发"来实现的。你可以在本地端口(没有用到的)和在远程服务器上运行的某个服务的端口之间建立"加密通道"。然后只要连接到本地端口。所有对本地端口的请求都被SSH加密并且转发到远程服务器的端口。当然只有远程服务器上运行SSH服务器软件的时候"加密通道"才能工作。

 

 

 

六、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。

        * 进入认证阶段。从此以后所有通信均加密。

        * 认证成功后,进入交互阶段。

转载于:https://www.cnblogs.com/zmlctt/p/3946860.html

<think>好的,我需要详细解释SSH协议的工作原理、安全性以及使用场景。首先,根据用户的问题,他需要了解这三个方面的详细信息。我需要确保回答结构清晰,分点说明,并且符合之前系统级指令中的格式要求,比如使用正确的中文,数学公式用$...$,独立公式用$$...$$,同时生成相关问题。 首先,我需要回顾SSH协议的基本概念。根据提供的引用内容,SSH是用于安全远程登录和其他网络服务的协议,通过加密技术保障数据传输的安全。引用[1]和[4]都提到了SSH替代了不安全的协议如Telnet和FTP,并且用于服务器管理、文件传输等场景。 接下来,关于工作原理部分。引用[3]提到SSH的加密机制,可能需要详细说明其加密过程,包括密钥交换、身份验证和数据传输加密。这里需要分步骤解释:连接建立、密钥交换、身份验证和加密通信。每个步骤需要展开,比如密钥交换可能使用Diffie-Hellman算法,身份验证有密码和公钥两种方式,加密通信使用对称加密算法。需要确保这些内容准确,并且正确引用相关引用来源。 然后是安全性部分。需要提到加密机制如何保障机密性和完整性,可能涉及哈希算法如HMAC,以及防止中间人攻击的措施。引用[3]和[4]都强调了SSH在安全性上的优势,可以引用这些部分来支持说明。 使用场景部分,引用[1]、[2]、[4]都提到了远程服务器管理、文件传输(SCP/SFTP)、端口转发和加密隧道。需要分点列出这些场景,并简要说明每个场景的应用方式。 在回答过程中,需要按照用户的要求,结构清晰,分点说明,并且自然地添加引用标识。比如在解释密钥交换时,可以引用[3]提到的加密机制;在安全性部分引用[2]的总结部分。 然后生成相关问题,需要根据内容提出三个相关问题,可能涉及SSH的加密算法、与HTTPS的区别、公钥配置步骤等。这些问题要相关且有深度,能够帮助用户进一步理解SSH协议。 最后检查是否符合所有格式要求:中文回答,行内公式正确(虽然SSH可能涉及较少的数学公式,但如果有的话需要正确使用),独立公式单独成段,LaTeX语法正确,引用标识正确添加在句末。例如,如果提到Diffie-Hellman算法,可能需要数学表达式,但SSH通常不涉及复杂的数学公式,所以可能不需要。但如果有,比如密钥交换的数学原理,需要用$$...$$格式。 现在整理这些思路,组织成结构化的回答,确保每个部分都有引用支持,并且问题相关且符合用户需求。</think>### SSH协议工作原理及安全性详解 #### 一、SSH协议工作原理 SSH协议通过加密通道实现安全通信,核心流程分为以下四个阶段: 1. **连接建立** - 客户端发起TCP连接(默认端口22),服务端返回协议版本信息,双方协商支持的算法[^4]。 2. **密钥交换** - 使用**Diffie-Hellman算法**生成会话密钥,数学原理为: $$ g^{a} \mod p \quad \text{与} \quad g^{b} \mod p $$ 双方交换计算结果后,独立生成相同的共享密钥$K = (g^{b} \mod p)^a = (g^{a} \mod p)^b$[^3]。 3. **身份验证** - **密码认证**:客户端发送加密后的用户名/密码 - **公钥认证**(更安全): - 客户端发送公钥指纹 - 服务端验证公钥是否在授权列表(`authorized_keys`) - 客户端用私钥签名挑战数据完成验证[^1] 4. **加密通信** - 使用AES、ChaCha20等对称加密算法加密数据 - 通过HMAC算法保证数据完整性[^2] #### 二、安全性保障机制 | 安全特性 | 实现方式 | |----------------|-----------------------------------| | 数据机密性 | AES/ChaCha20对称加密 | | 完整性校验 | SHA-2/HMAC防止篡改 | | 身份防伪 | 公钥指纹验证(首次连接需人工确认)| | 抗重放攻击 | 数据包序列号与MAC绑定 | SSH协议已修复早期版本(如SSHv1)的漏洞,推荐使用SSHv2协议[^4]。 #### 三、典型应用场景 1. **远程服务器管理** - 通过`ssh user@host`命令安全登录Linux服务器 2. **安全文件传输** - SCP协议:`scp file.txt user@host:/path` - SFTP协议:交互式文件管理 3. **端口转发** - 本地转发:`ssh -L 本地端口:目标主机:目标端口 跳板机` - 远程转发:突破NAT实现内网穿透 4. **加密隧道** - 将其他明文协议(如VNC)封装在SSH隧道中传输
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值