一、前言

Secure Shell缩写是SSH, 由IETF的网络工作小组(Network Working Group)所制定,SSH是一项创建在应用层和传输层基础上的安全协议,为计算机的shell提供安全的传输和使用环境

传统的网络服务程序,如rsh FTP POP Telnet本质上都是不安全的,因为它们在网络 上是用明文传送数据,用户账号,和用户口令,很容易受到中间人攻击方式的攻击

存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后在冒充用户把数据传给真正的服务器

而SSH是目前比较可靠,专为远程登录回话和其他网络服务提供安全性的协议,利用SSH协议可以有效的防止远程管理过程中的信息泄露问题

通过SSH可以对所有的输出数据进行加密,也能够防止DNS欺骗和IP欺骗

SSH的另一个优点是传输的数据可以是经过压缩的,可以加快传输的速度,

SSH还有很多功能, 可以代替Telnet, 可以作为FTP, POP,甚至为PPP提供一个安全的通道

二、历史

最初的SSH协议是由芬兰的研究员atu Ylönen于1995年设计开发的, 但是因为受版权和加密算法的限制,现在很多人转而使用openSSH, 它是SSH的替代软件包,而且是开放源代码且自由的

三、基本架构

SSH协议框架最主要的三个协议:

传输层协议(the transport layer protocol):传输层协议提供服务器认证,数据机密性, 信息完整性等的支持

用户认证协议(the user authentication protocol): 用户认证协议为服务器提供客户端的身份鉴别

连接协议(the connection protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用

同时还有为许多高层的网路安全应用协议提供扩展的支持

各种高层应用协议可以相对地独立于SSH基本体系之外,并且依靠这个基本框架,通过连接协议使用SSH的安全认证

四、SSH的安全验证

在客户端看来,SSH提供两种级别的安全验证

第一种级别-基于密码的安全验证,知道账号和密码,可以登录到远程主机,并且所有的传输数据都会被加密,但是,可能有别的服务器在冒充真正的服务器,无法避免被中间人攻击

第二种级别-基于密钥的安全认证,需要依靠密钥,必须为自己创建一对密钥,把公有密钥放在需要访问的服务器上

客户端软件会向服务器发出请求,请求用你的密钥进行安全验证,服务器收到请求之后,先在你的该服务器的用户根目录下寻找公有密钥,然后把它和发送过来的公有密钥进行比较,如果两个密钥一致,服务器使用公有密钥加密质询challenge,并且把它发送给客户端软件,从而避免被中间人攻击

在服务器端,SSH提供安全验证,在第一种方案中,主机将自己的公用密钥分发给相关的客户端,客户端在访问主机时候则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确保数据的保密性

第二种方案中,存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户端的主机则只要保存一份认证中心的公开密钥就可以了,在这种模式下,客户端必须访问认证中心然后才能访问服务器主机

五、SSH协议的可扩展能力

SSH协议框架中设计了大量可扩展的冗余能力,比如用户自定义算法,客户自定义密钥规则,高层扩展功能性应用协议,这些扩展大多遵循IANA的有关规定,特别在重要的部分,像是命名规则和消息编码方面