SSH登陆

Secure Shell(SSH) 是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。加密保证了数据的保密性和完整性。SSH采用公钥加密技术来验证远程主机,以及(必要时)允许远程主机验证用户。

SSH登陆过程

  1. 用户向服务器发登陆请求
  2. 服务器收到用户的请求,将自己的公钥发送给用户
  3. 用户用收到的服务器公钥加密自己的密码,发送给服务器
  4. 服务器收到密码后,用私钥进行解密,如果密码正确,则允许登陆

中间人攻击

上面的登陆过程,看似安全,但还是难以防范中间人攻击。

假设在用户和服务器之间有一个恶意用户,截获用户发送的请求,将自己的公钥发送给用户,用户很难知道收到的是否是服务器的公钥,用户的密码信息便可能被盗取。

解决办法

为了防止中间人攻击,当用户第一次请求登陆服务器时,服务器会将公钥的指纹显示的打印出来,供用户检验。

如下图所示:

由于公钥很长,是一串长达1024位,采用RSA加密的字符串,很难识别。所以为了方便校验,指纹经过MD5加密,浓缩成了128位。

如果no,则服务器会以“Host key verification failed.”终止链接。

如果yes,则服务器会将公钥保存到$HOME/.ssh/known_hosts文件中。下次用户再登陆时,就不需要上面的步骤了。

然后用户就可以输入密码,进行登陆了。

免密码登录

有时候,每次登录都需要输入密码也是挺烦的,特别是登录次数较多的时候。

免密码登录过程

  1. 用户需要在本地生成一套密钥对,包括一个公钥和一个私钥,并将公钥复制到服务器中
  2. 用户向服务器发送登录请求
  3. 服务器生成一个随机数,并用用户的公钥对随机数加密,发送给用户
  4. 用户收到加密数据,并用自己的私钥进行解密,将解密后的数据发送给服务器
  5. 服务器验证数据是否正确,如果正确,则允许登录

这是一个公钥认证过程,期间不需要用户手工输入密码,主要过程是用户需要事先将公钥复制到服务器上。