SSH登陆
Secure Shell(SSH) 是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。加密保证了数据的保密性和完整性。SSH采用公钥加密技术来验证远程主机,以及(必要时)允许远程主机验证用户。
SSH登陆过程
- 用户向服务器发登陆请求
- 服务器收到用户的请求,将自己的公钥发送给用户
- 用户用收到的服务器公钥加密自己的密码,发送给服务器
- 服务器收到密码后,用私钥进行解密,如果密码正确,则允许登陆
中间人攻击
上面的登陆过程,看似安全,但还是难以防范中间人攻击。
假设在用户和服务器之间有一个恶意用户,截获用户发送的请求,将自己的公钥发送给用户,用户很难知道收到的是否是服务器的公钥,用户的密码信息便可能被盗取。
解决办法
为了防止中间人攻击,当用户第一次请求登陆服务器时,服务器会将公钥的指纹显示的打印出来,供用户检验。
如下图所示:
由于公钥很长,是一串长达1024位,采用RSA加密的字符串,很难识别。所以为了方便校验,指纹经过MD5加密,浓缩成了128位。
如果no,则服务器会以“Host key verification failed.”终止链接。
如果yes,则服务器会将公钥保存到$HOME/.ssh/known_hosts文件中。下次用户再登陆时,就不需要上面的步骤了。
然后用户就可以输入密码,进行登陆了。
免密码登录
有时候,每次登录都需要输入密码也是挺烦的,特别是登录次数较多的时候。
免密码登录过程
- 用户需要在本地生成一套密钥对,包括一个公钥和一个私钥,并将公钥复制到服务器中
- 用户向服务器发送登录请求
- 服务器生成一个随机数,并用用户的公钥对随机数加密,发送给用户
- 用户收到加密数据,并用自己的私钥进行解密,将解密后的数据发送给服务器
- 服务器验证数据是否正确,如果正确,则允许登录
这是一个公钥认证过程,期间不需要用户手工输入密码,主要过程是用户需要事先将公钥复制到服务器上。