参考
SSH有两种认证方式,基于密码和基于密钥的身份认证。都是采用非对称加密的方式实现身份认证,当认证通过后使用对称加密进行数据传输,提供传输效率。
1、基于密码的身份认证
身份认证通过,然后是交换会话密钥(对称加密),使用会话密钥对之后传递的数据进行加密,即传输数据加密,过程如下。注:使用对称加密效率高。
客户端生成会话数据加密 sess_key,使用服务端公钥 ser_rsa.pub 加密后传输给服务器(会话密钥),
服务器获取到后使用私钥 ser_rsa 解密,得到sess_key,
客户端和服务器通过 sess_key 进行会话数据安全传输,
即客户端和服务器用sess_key 分别对传输数据进行加密和解密。
但是,这种认证方式无法避免“中间人”攻击,可能会有别的服务器在冒充真正的服务器。
当第一次连接服务器时会提示:
PS E:\soft\alacritty> ssh root@192.100.3.200
The authenticity of host '192.100.3.200 (192.100.3.200)' can't be established.
ECDSA key fingerprint is SHA256:XNG7Q2O19x6jf6Q5DSkHqSqqpB7/Ju8+4d+6Is5NAWM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.100.3.200' (ECDSA) to the list of known hosts.
2、基于密钥的身份认证
客户端生成一对公钥和私钥,并将自己的公钥发送到服务器上,认证过程不需要输入密码,避免“中间人”的攻击,如图所示。
认证成功后,使用对称加密的方式传输数据。
风险点:在第一次将客户端公钥发送到服务器这一步,还是有可能受到“中间人”的攻击,如果首次连接没有中间人,之后的连接就无需担心中间人,因为中间人给出的公钥和服务端给出的公钥相同的可能性可以忽略。