最近发现一篇介绍SSH数据交互过程的文章,描述得很清楚,转载在这里。
(1)SSH启动时,会主动找/etc/ssh/ssh_host*文档,系统刚安装好时是没有这些公钥密钥的,因此,SSH会计算这些公钥,同时也计算出自己需要的私玥文档
(2)当客户机请求连接到SSH服务器,这需要相应的软件,Putty(免费)、SecureCRT和Xshell 4,最好不要下载中文版,有后门。
(3)服务器接到请求后,传送通过第一步计算得到的公钥给客户端(这里可能是明码传送,公钥本来就是公开的)
(4)a.若客户端第一次连接服务器,则会将服务器公钥数据记录。 b.若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客户端自己的公私钥数据
(5)用户将自己的公钥传送给服务器。此时服务器:『具有服务器的私钥与客户端的公钥』,客户端则是: 『具有服务器的公钥以及客户端自己的私钥』,你会看到,在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统喔。
(6)a.服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密; b.客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。
SSH联机过程,前5步的目的要让服务器和客户端各自拥有自己的公私玥和对方的公钥,第六步则是实现,服务器拿客户端的公钥加密数据传给客户端,只有这个客户端的私玥才能解密,其它任何人截获其数据都会因为没有对应的私玥而无法打开(因为私玥和公钥是成对的!),反过来,客户端传数据给服务器也是一样。