第一种方式为密码登录
在整个过程中,客户端本身不存有任何密钥。
过程:
- 客户端输入用户名,发出登陆请求
- 服务端接收到请求并返回给客户端公钥以及公钥指纹
- 客户端收到服务端发送的公钥,对自己的登陆密码用公钥进行加密然后将密文发送给服务端
- 服务端收到密文后,使用自己的私钥将密文进行解密,得到客户端的登陆密码并对比确认
- 服务端返回给客户端,登陆结果
第二种方式为公钥登陆,也就是免密登陆
在这个过程中,客户端自身就有自己的公钥和私钥
- 客户端生成一对密钥,然后自己手动将公钥添加到服务端的authorized_keys中
- 客户端直接发起登陆请求到服务端
- 服务端收到请求后,生成随机数R,并使用这个客户端的公钥对随机数R进行加密,得到密文并返回给客户端
- 客户端收到密文后,使用自己的私钥对密文解密,得到随机数R。然后用MD5对随机数R和SessionKey进行生成摘要A1,并发送给服务端
- 服务端同样用MD5对随机数R和SessionKey进行生成摘要A2,然后对比A1和A2,完成登录确认