首先说明一下 SSH是什么 ? 很简单的,SSH就是一种协议,就像TCP,UDP之类的一样,只是一种通信的约定.进而产生的一个问题就是协议的实现方式是有很多种的,多个厂商(甚至你我)都可以实现这个协议.
然后这个协议的作用在哪里?好吧,我们从计算机的发展历史来说吧,早期的计算机在网络上是明文传输消息,因此显然存在以下问题
- 数据可以让人随意截获并且很轻易地修改并且重新发送
.对于一些数据,举例子来说假设是发送以下字符串:
“AAAAAAAAAAAAAAAAAAA….AAAAAAAAAAAAAAAAAA”
没有压缩后再发送,这里可以优化成压缩后再发送(姑且这样认为吧,下 面的备注中会纠正一下这种说法)备注:压缩是否会提高文件传输速度?很明显是不全然的,这取决于你的计算机,因为压缩过程本身也是需要CPU进行处理的.而且压缩是一个极度耗费CPU的操作,所以可以认为:
- 加上压缩过程后,总耗时=压缩时间+网络传输时间t1
- 不加上压缩过程,总耗时=网络传输时间t2
虽然显然t2 < t1,但是压缩时间呢???加上以后你确定不因为CPU的性能问题而造成新的瓶颈???因此,压缩不一定能提高文件传输速度,可能会更慢,也可能会更快!这取决于你的计算机硬件(CPU)!
这时候扯了这么多,相信大家有点蒙蔽了,其实上面只是说一下早期明文传输的缺点~~不可能白白提到这么多缺点又不提及解决方案被?没错,这就是SSH解决方案
SSH使用了一下两个技术: - 压缩技术
- 公钥加密技术
而压缩技术很好的解决了问题2,但是它却无法解决问题1,因为压缩不是加密!下面为公钥加密过程
单纯一看估计什么感觉也没有把,好吧,为此我们构造出一些情况出来,并且借这些情况去深入思考一下SSH这玩意儿.
这就是大名鼎鼎的SSH攻击过程,那么问题来了.SSH是如何解决这个中间人攻击问题呢??或者我们仔细观察一下上面两个图,或者能够换一个问法,不再使用这么专业的名词,直接达到问题的本质——————SSH是如何区分去远方服务器的公钥和攻击者随意构造出来的公钥的????
这就是后面要讲的东西了,我们每次第一次登录一个不知名的主机时候(比如攻击者的机器),都会给出以下提示:
这段话意思是你登录的机器真实性并不保障,然后给出了那个公钥也就是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,然后让你输入时候要登录
每次第一次登录连接时候,都告诉你对方提供的公钥是多少,SSH觉得每一个服务器商都应该提供自己官方的公钥(意思是官网上贴出自己的公钥),让大家都知道,然后你就能通过公钥比较,来判断这是不是攻击者的公钥了….
这个机制还有第一次登录提醒(假设你经常登录的一个机器突然给出了一个”第一次登录验证”,或许你能明白这可能是伪装机器把,,,,)
上面讲的就是SSH如何解决中间人问题.下面讲的是SSH的免登录问题.
假想一种情况,可能存在以下状况:假设服务器只为公司内部有限几个固定客户端服务,并且客户不想每次登录时候都需要密码.那该如何处理?
这就是公钥登录机制,可以省去每次登录都需要密码的问题…..下面是示意图
好吧,简单的原理介绍就介绍到这里把,其实今天之所以看这个,是因为最近在看git,git里面也有用到SSH,现在一想,其实用的不就是SSH的免登录机制么…