SSH是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。
SSH以非对称加密方式实现身份验证,主要有以下两种:
-
基于密码的安全验证
-
基于密钥的安全验证
1.基于密码的安全验证
是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录,如图所示。
身份认证通过,然后是交换会话密钥(对称加密),使用会话密钥对之后传递的数据进行加密,即传输数据加密,过程如下。注:使用对称加密效率高。
客户端生成会话数据加密 sess_key,使用服务端公钥 ser_rsa.pub 加密后传输给服务器(会话密钥),
服务器获取到后使用私钥 ser_rsa 解密,得到sess_key,
客户端和服务器通过 sess_key 进行会话数据安全传输,
即客户端和服务器用sess_key 分别对传输数据进行加密和解密。
但是,这种认证方式无法避免“中间人”攻击,可能会有别的服务器在冒充真正的服务器。
2.基于密钥的安全验证
客户端生成一对公钥和私钥,并将自己的公钥发送到服务器上,认证过程不需要输入密码,避免“中间人”的攻击,如图所示。
认证成功后,使用对称加密的方式传输数据。
风险点:在第一次将客户端公钥发送到服务器这一步,还是有可能受到“中间人”的攻击,如果首次连接没有中间人,之后的连接就无需担心中间人,因为中间人给出的公钥和服务端给出的公钥相同的可能性可以忽略。