1.目标

实现客户机A免密码登录服务器B

2.步骤

  1. 在终端输入ll ~/.ssh如果存在id_rsa_xid_rsa_x.pub则说明已经存在一对密钥/公钥

  2. 如果不存在密钥和公钥,则执行生成密钥和公钥的命令:

    ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "密钥说明" 
    

    多次按回车(表示不设置密码)之后在~/.ssh/目录会多出 id_rsa_xid_rsa_x.pub 两个文件

  3. 将id_rsa_x.pub中的内容追加到B机器的.ssh/authorized_keys文件中,如果不存在则手动创建该文件

注意: 一个客户端可以生成多个密钥/公钥对,-f 后面的参数值表示本次生成的密钥对文件的名字 。这在某些场景下尤为有用(例如:同一台机器需要同时配置两个github账号)

3.原理

先来了解两个术语:对称加密和非对称加密
对称加密: 加密和解密都使用同一个密钥(效率高,安全性低)
非对称加密: 公钥加密,私钥解密; 私钥加密,公钥解密(效率低,安全性高)

免密码登录就是使用了非对称加密来达到免密码登录功能的,具体流程如下:

  1. A把公钥复制到B的服务器上面
  2. A远程登录B服务器,此时B会把自己的公钥返回给A,并且让A确认是否信任该公钥所代表的服务器
    图1
    图2
  3. 如果A信任B服务器,接着B服务器将会给该用户A发送一个挑战码,用户A将会用自己的私钥对挑战码进行一次加密,接着使用服务器B公钥对挑战码进行二次加密,然后将加密后的数据发送给服务器B;服务器B接收到用户A加密后的挑战码后先用自己的私钥进行一次解密再用之前保存在本机的用户A的公钥进行二次解密,如果得到的挑战码与自己发送的挑战码一致,则接受该用户免登陆认证A先使用
    图3