OpenSSH(免费的 SSH 的实现)类似于 telnet
或rsh
,ssh
客户程序也可以用于登录到远程机器。所要求的只是该远程机器正在运行 sshd
,即 ssh
服务器进程。但是,与 telnet
不同的是,ssh
协议非常安全。加密数据流,确保数据流的完整性,甚至安全可靠的进行认证它都使用了专门的算法。
SSH原理
1、服务器建立公钥
每一次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host* 的文件。系统刚刚安装完成时,由于没有这些公钥,sshd会主动去计算出这些需要的公钥,同时也会计算出服务器自己需要的私钥
[root@rhce7 ~]# cd /etc/ssh [root@rhce7 ssh]# ls -l total 268 -rw-------. 1 root root 242153 Mar 20 2014 moduli -rw-r--r--. 1 root root 2123 Mar 20 2014 ssh_config -rw-------. 1 root root 4442 Mar 20 2014 sshd_config -rw-r-----. 1 root ssh_keys 227 Jun 28 05:37 ssh_host_ecdsa_key -rw-r--r--. 1 root root 162 Jun 28 05:37 ssh_host_ecdsa_key.pub -rw-r-----. 1 root ssh_keys 1675 Jun 28 05:37 ssh_host_rsa_key -rw-r--r--. 1 root root 382 Jun 28 05:37 ssh_host_rsa_key.pub
2、客户端主动联机请求
若客户端想要联机到ssh服务器,则需要使用适当的客户端程序来联机,比如ssh, putty等客户端程序连接
3、服务器传送公钥给客户端
接收到客户端的要求后,服务器便将第一个步骤取得的公钥传送给客户端使用(此时应是明码传送,反正公钥本来就是给大家使用的)
4、客户端记录并比对服务器的公钥数据及随机计算自己的公私钥
若客户端第一次连接到此服务器,则会将服务器的公钥记录到客户端的用户家目录内的 ~/.ssh/known_hosts。
若是已经记录过该服务器的公钥,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥,则开始计算客户端自己的公私钥
5、回传客户端的公钥到服务器端
用户将自己的公钥传送给服务器,此时:
服务器:具有服务器的私钥与客户端的公钥
客户端:具有服务器的公钥以及客户端自己的私钥
6、开始双向加解密
(1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密
(2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密,这样就能保证通信安全
参考:
http://www.open-open.com/lib/view/open1422417444048.html