为什么在网络中能ping通却不能ssh
在网络世界中有两件事十分重要,一个是通讯协议,一个是linux。
在实际工作中主要用SSH,来登录服务器,但是经常会出现网络是通的,却不能登录服务器的情况,这篇文章主要是探索背后的原理,揭开网络世界神秘的一角。
要了解SSH安全协议,首先要了解七层网络模型,记忆口诀:物链网传业。可以参考:zsdnishishui:HTTP 概述
ping命令是ICMP协议的应用层实现,ICMP协议是在网络层,是没有端口号的,ICMP协议是TCP/IP协议簇的其中一个协议。而SSH协议是建立在TCP/IP协议之上的,是建立在传输层之上的,在应用层实现了此协议。而且能ping通只是说明了网络是通的。ssh的端口默认是22,ping却没有端口号。ssh和ping的差别很大,所以能ping通并不代表能登录服务器,不能登录服务器的原因有很多,比如22端口被屏蔽了,禁止外网访问等。在一些安全要求比较高的机构里面,有的是通过VPN登录服务器的。
SSH是安全协议,必然涉及到加解密的内容,可以参考:HTTPS 概述 - 知乎 (zhihu.com),其中加解密涉及两种方式:对称加密:一个密钥,非对称加密:一对密钥(公钥和私钥)。
为了保证安全,对称加密不要泄露密钥,非对称加密不要泄露私钥。SSH协议使用了两种加密方式,因为对称加密性能好,而非对称加密性能差一些。所以在建立加密通道之后,使用的是对称加密。建立之前使用的是非对称加密。怎么使对称加密的密钥不泄露,是SSH协议最难的地方,采用的方案是使用密钥交换算法,客户端和服务端各自生成同一个密钥,并且不传输这个密钥。
使用SSH登录服务器,有两种方式,一种是用户名密码登录,另一种是密钥登录。推荐使用密钥登录。这种登录方式使用的是非对称加密,客户端生成一对密钥(公钥和私钥),并把公钥传到服务器上,这样下次只需提供公钥就能登录服务器了。
补充ssh密钥登录的流程
