SSH协议简介

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SSH协议简介目录目录1一、前言2二、UNIX及Linux中常用的SSH2三、SSH中用户认证方式21.概述22.认证过程32.1.认证请求32.2.认证请求的应答42.3.认证的完成42.4.其他43.用户认证方式53.1.公开密钥认证方法53.2.口令认证方法63.3.基于主机的认证方法8四、SSH1与SSH2的主要区别概述91.SSH192.SSH291.前言SSH的英文全称为SecureShell,是IETF(InternetEngineeringTaskForce)的NetworkWorkingGroup所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。SSH(SecureShell)是以远程联机服务方式操作服务器时的较为安全的解决方案。它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件OpenSSH。用户通过SSH可以把所有传输的数据进行加密,使中间人的攻击方式不可能实现,而且也能够防止DNS和IP欺骗。它还有一个额外的好处是传输的数据是经过压缩的,可以加快传输的速度。SSH作用广泛,既可以代替Telnet,又可以为FTP、POP,甚至为PPP提供一个安全的通道。SSH协议在预设的状态中,提供两个服务器功能:一个是类似Telnet的远程联机使用Shell服务器,即俗称SSH功能;另一个是类似FTP服务的SFTP-Server功能,可提供更安全的FTP服务。如需要SSH的详细信息请参考(SSHCommunicationsSecurityCorporation的网站)和(开放源码的OpenSSH组织的网站)。本文将要介绍的是SSH协议体系中的用户认证机制和基本认证方法。1.UNIX及Linux中常用的SSH在UNIX/Linux系统中,为了实现主机与客户端之间的数据安全传输,通常采用SSH协议进行连接。在ScoUNIX5.07及以上版本中,系统安装时默认已安装sshd,即SSH的服务端程序,这些默认安装的版本支持SSH1和SSH2.在较新的众多的Linux版本中,也都已经支持SSH,其中较多使用OpenSSH且大都支持SSH1和SSH2.1.SSH中用户认证方式1.概述在SSH协议中,用户认证是由服务器方来主导进行的。服务器先向客户机说明有哪些认证方法可以使用,之后的认证过程中,客户机则可以根据情况选择一种或几种认证方法来继续认证操作。服务器对多种认证方法的支持给客户机带来很大的灵活性,使用户得到最大可能的便利,同时也增强了协议的实用性。在SSH协议体系中,所有认证方法都是通过名字来标识的。有一个特殊的认证方法名为none,是系统保留的。如果客户机试图通过none方法来连接服务器,服务器在通常情况下就将自己所支持的所有认证方法清单作为应答发还给该客户机。一个极端的情况:当某个客户机已经被免除任何认证时,服务器收到它的一个none请求时就会无条件接受。SSH协议对服务器的用户认证过程有一个超时限制,一般建议为10分钟,也就是说如果10分钟内还没有完成认证,服务器就断开连接。同样,客户机认证如果失败可以重试,但是重试的次数也是有限制的,协议建议为20次。1.认证过程典型的认证过程如下图1所示:1.认证请求SSH协议中认证请求的消息格式如下:byteSSH_MSG_USERAUTH_REQUESTstring用户名(采用ISO-10646UTF-8编码[RFC2279])string服务名(采用US-ASCII字符集)string认证方法名(采用US-ASCII字符集)包的其余部分根据具体认证方法而变化。在一次服务会话的认证过程中,用户名和服务名这两个域的内容是不会变化的,服务器一旦发现它们有所变化,则必须将此次会话中的认证状态复原,如果状态不能复原,那么服务器就断开连接以防欺诈。服务名指定了用户所请求的服务,如果该服务不可用,则服务器必须断开连接。用户名则指明了用户的身份,如果服务器上没有该用户名,可以给客户端应答一些伪造的认证方法名,以混淆客户机的视听,避免泄漏本机的帐号信息。比如,当客户机使用用户名tom来请求认证,而服务器上没有tom这个帐号,服务器如果直接拒绝访问,那么客户端程序就可以知道原来服务器上没有tom这个帐号。所以服务器采取一个策略,它并不直接拒绝请求,而是告诉客户机要使用a、b、c等认证方法继续认证,其实a、b、c这三种方法都是服务器为了混淆视听而伪造的认证方法。客户机接下来就会按照要求去使用这些伪造的认证方法a、b、c去请求认证,这些认证理所当然地会被拒绝。这么一来,客户机程序就比较难以判断是否是因为用户名错误而引起的认证失败,从而在一定程度上保护了服务器上的用户帐号信息。客户机可以连续给服务器发送若干认证请求,如果其中某种认证方法不被服务器支持,那么服务器就直接拒绝相应的请求。如果服务器正在处理某个认证请求时又收到同一客户的一个新的认证请求,那么旧的请求被放弃,服务器以新请求开始重新认证。1.认证请求的应答如果服务器拒绝了一个认证请求,它必须给出下面格式的应答信息:byteSSH_MSG_USERAUTH_FAILUREstring一个可用的认证方法列表boolean是否成功的标志在拒绝请求的应答消息中,除了必须把成功标志的布尔量设置成假以外,还给出一串以逗号分隔的认证方法的名字。这个消息告诉客户机:你的前一个请求被拒绝了,请使用所给出的认证方法名字继续尝试请求。当服务器接受认证请求,必须给出如下应答:byteSSH_MSG_USERAUTH_SUCCESS因为SSH协议允许服务器主导认证过程,并支持采用多种认证方法,所以服务器只是在整个认证过程全部完成后才会发送认证成功的消息。比如,某一次认证过程中服务器需要进行a、b、c三种方法的认证,其典型过程如下:(1)客户机发送了一个none认证请求;(2)服务器接收到none请求后应答给客户机一个请求失败消息,并附带了a、b、c三种认证方法名字;(3)客户机收到应答后使用a方法再次请求;(4)服务器通过了a方法的认证后再次应答一个请求失败的消息,并附带了两种认证方法,即b和c;(5)客户机收到应答后继续使用b方法发送请求;(6)服务器通过了b方法的认证后应答一个请求失败的消息,并附带了c这个认证方法名;(7)客户机收到应答后使用c方法再次请求认证;(8)服务器通过了c方法的认证后,应答一个认证成功的消息,从而结束了整个认证过程。需要说明的是,在一次会话中,一旦服务器向客户机发出认证成功的应答之后就会忽略此后的本会话中所有的认证请求消息。如果服务器在认证成功之前收到客户机的一些非认证消息,则等到认证成功之后,这些消息才会被传递给相应的服务进行处理,相当于有了一个缓冲。1.认证的完成认证过程的完成是以一个认证成功的应答消息来标记的,服务器在发送SSH_MSG_USERAUTH_SUCCESS消息之后,就开始提供客户机所请求的服务了。1.其他SSH协议支持在认证过程中显示标语,标语消息的格式如下:byteSSH_MSG_USERAUTH_BANNERstring消息内容(ISO-10646UTF-8编码)string语言标记(定义在[RFC1766]中)客户机在默认情况下应当把这个消息的内容显示在屏幕上。在处理这些信息的显示时,需要采取一定的过滤措施来避免那些通过发送终端控制字符来进行网络攻击的行为,以保证安全。SSH认证协议中的主要消息就是本节所描述的四类,消息编码如下:SSH_MSG_USERAUTH_REQUEST50SSH_MSG_USERAUTH_FAILURE51SSH_MSG_USERAUTH_SUCCESS52SSH_MSG_USERAUTH_BANNER531.用户认证方式1.公开密钥认证方法在这种方法中,拥有一个私有密钥就解决了认证问题。这种方法使用用户的私有密钥产生一个签名并发送给服务器,服务器则必须验证这个密钥是该用户身份的有效证明,同时还必须验证签名的有效性。如果两者都验证通过,服务器就接受这个认证请求,否则就拒绝。即使通过了公开密钥认证,服务器也还是可以要求进一步做其他认证的。私有密钥经常是以加密的形式存储在客户机上,在产生签名之前,用户必须提供一个密码。即使私有密钥没有加密,签名的操作也会需要占用一些宝贵的计算资源。为了避免不必要的处理和多余的用户交互,下面的消息提供了一个功能,可以用来查询是否认证使用这个密钥会被接受。byteSSH_MSG_USERAUTH_REQUESTstring用户名string服务名stringpublickeybooleanFALSEstring公开密钥算法名字stringpublickeyblob公开密钥算法是在传输层协议文档中进行定义的[SSH-TRANS]。消息中的publickeyblob应该包含具体的证明内容,实际就是用户的公开密钥。服务器收到这个消息,就按照算法名字来检查是否可用,如果不可用就予以拒绝,也就是给予客户机一个SSH_MSG_USERAUTH_FAILURE应答。如果该算法可用,服务器就发送一个下述的应答消息:byteSSH_MSG_USERAUTH_PK_OKstring请求消息中指明的公开密钥算法string请求消息的publickeyblob在收到这个消息后,客户机再发送一个用私有密钥产生的签名。当然客户机也可以直接发送签名而不事先去验证密钥是否能够被服务器接受,也就是说没有上面的一问一答两个消息。发送签名的消息其包格式如下:byteSSH_MSG_USERAUTH_REQUESTstring用户名string服务名stringpublickeybooleanTRUEstring公开密钥算法名字string用来进行认证的公开密钥string签名信息签名信息的内容其实也就是用相应的私有密钥加密过的数据,数据格式如下:string会话标识byteSSH_MSG_USERAUTH_REQUESTstring用户名string服务名stringpublickeybooleanTRUEstring公开密钥算法名字string用来进行认证的公开密钥当服务器收到这个消息的时候,它必须首先检查所提供的密钥是否可以用来进行认证,如果是,它还必须检查是否签名是正确的。如果两项均通过验证,这个认证方法就成功了。典型的公开密钥认证方法过程可以示意如图2:1.口令认证方法SSH协议的任何实现版本中都必须支持口令认证方法。在口令认证方法中,服务器可以根据需要要求用户修改自己的口令。byteSSH_MSG_USERAUTH_REQUESTstring用户名string服务名stringpasswordbooleanFALSEstring纯文本格式的口令(ISO-10646UTF-8编码)上面是一个用户认证的消息,它指明了认证方法是password,即口令方法。唯一的布尔域指明是否修改用户口令,布尔值为假时,消息中只包含用户原来的口令。在认证消息中,口令是采用ISO-10646UTF-8编码的,客户端和服务器端均可以根据需要将编码格式转换到各自环境下所需要的格式。还有,就是在产生这样一个认证消息包的时候,口令数据是不做加密处理的,因为SSH协议中的保密机制是由传输层来承担的。通常情况,服务器对上面这个消息给出一个成功或者失败的应答。然而服务器也可以给出一个SSH_MSG_USERAUTH_PASSWD_CHANGEREQ消息来作为应答。byteSSH_MSG_USERAUTH_PASSWD_CHANGEREQstring提示信息(ISO-10646UTF-8编码)string语言标记(具体定义见[RFC1766])这个应答消息就是要求用户修改自己的口令。此时,客户端软件应当要求用户输入一个新的口令,然后再向服务器发送一个新的请求消息,格式如下:byteSSH_MSG_USERAUTH_REQUESTstring用户名string服务名stringpasswordbool

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功