SSH简介

概述

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

传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的。这是因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。

而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗IP欺骗

SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。

历史

最初的SSH协议是由芬兰的一家公司的研究员Tatu Ylönen于1995年设计开发的,但是因为受版权和加密算法等等的限制,现在很多人都转而使用OpenSSH。

OpenSSH是SSH的替代软件包,而且是开放源代码且自由的。

基本架构

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

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

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

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

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

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

Linux环境下的使用

此处只讨论SSH在Linux下的使用:

SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了,如下:

$ ssh user@host

如果本地用户名与远程用户名一致,登录时可以省略用户名。

$ ssh host

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

$ ssh -p 2222 user@host

上面这条命令表示,ssh直接连接远程主机的2222端口。

公钥加密原理

SSH之所以能够保证安全,原因在于它采用了公钥加密。公钥加密的过程:

  1. 远程主机收到用户的登录请求,把自己的公钥发给用户;

  2. 用户使用这个公钥,将登录密码加密后,发送回来;

  3. 远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是的”中间人攻击”(Man-in-the-middle attack)。

猜你喜欢

转载自blog.csdn.net/qq_24118527/article/details/78566053
ssh