客户端和服务端使用沟通时的信息,协商加密算法以及一个双方都知道的数字。
双方各自生成只有自己才知道的 private 密码,并使用上一步中的数字进行加密,再次生成密码。
双方交换再次加密后的密码。
双方在对方发来的密码基础上,加上第二步自己的 private 密码再次加密。本次加密之后得到的结果就是在双方处都相同的 Session Key。
客户端用 Private Key 生成签名向服务器发起登录请求。
服务端验证签名,检查自己有没有和这个签名匹配的 Public Key,如果有,则进入下一步。
服务端生成一串随机字符串,用 Public Key 加密后发送给客户端。
客户端用相应的 Private Key 解密这串字符串,再使用 MD5 hash 和 Session Key 加密该字符串,将结果发送给服务端。
服务端使用同样的 MD5 hash 和 Session Key 计算这串字符的加密结果,并和客户端发来的结果做比对,如果结果一样,则允许客户端登录。
RFC4419(https://url.leanapp.cn/F3qY68y)
RFC4252(https://url.leanapp.cn/2eAjQIA)
《SSH, The Secure Shell: The Definitive Guide》
Photo by Viktor Talashuk on Unsplash
end