ssh的两种验证方式
- 基于口令的验证方式
- 基于密钥的验证方式
下面我们主要看基于密钥的验证方式:
当两台机器(A机器、B机器)需要通过ssh 密钥模式通信时,首先我们要在两台机器中生成密钥,这个密钥是成对生成的即一个是公钥一个是私钥。其中公钥提供给需要免密通信的机器,私钥用来做验证。
生成密钥
生成密钥的命令:
ssh-keygen
拷贝密钥
将生成的密钥拷贝到B机器中,有如下的两种方式
- scp命令:scp file xx.xx.xx.xx:/**
- ssh-copy-id命令: ssh-copy-id xx.xx.xx.xx
使用ssh-copy-id的好处,该命令会直接将公钥放到指定机器的authorized_keys文件中。如下图所示:
A机器中的公钥
B机器授权列表中A的公钥
我们再在B机器上将同样的操作执行一遍,将B机器中生成的公钥拷贝到A机器中,这样我们就可以在A和B机器之间做免密访问。
这是我们从A机器登陆B机器就不用再输入密码了
此时当A向B通信时,B是怎么确认数据是来自A呢,毕竟公钥是没法做唯一的判断的,比如C拿到A的公钥,C向B通信B怎么判断呢?下面一步一步地来解释一下:
- A向B通信时,会同时发送A的公钥和数据。
- B接收到公钥时,先去查询授权列表即查询authorized_keys文件
- B在authorized_keys文件中查询到相同的公钥时,B将使用这个公钥加密一个随机字符串,并发送给A
- A收到加密后的字符串后要使用私钥做解密的操作,得到原始的字符串(C是没有私钥的,无法做解密)并在此发送给B
- B将收到的字符串和本地保存的字符串做比较,相同,则证明A是合法的。
- B就可以处理A发送来的数据。
至此,A向B的一次完整免密通信就算结束了。