ssh免密登录的原理
首先免密登录要从SSH的流程说起,最常见的是密码登录,流程如下
免密登录要实现的是客户端向服务端发起连接请求的时候,服务端已经 认识 客户端,从而实现直接授权。
通过1个类比来理解这个原理:
密码登录就是小弟要到山上的寨子里去,结果看门的大爷说了自己的暗号( 12345 )小弟收到暗号后,根据组织上给的算法,报上暗号( 123456 ,其实就是加了后面一个数字)。对头!放行。
那么实现免密登录就是不想提供密码,这个时候交互的逻辑是不会变的,对方一定要检验客户端信息。不输入密码,那就对服务端的任意一个信息进行校验就可以。
比如:
上面的大爷今天说的是12345,明天说的可能是123456。
那么如何保证你就是山寨里的人呢,就要“算法”一致。这个可以通过客户端生成一对秘钥来,然后把公钥分发给服务端。“算法”一致就是你加密的我能解密,解出来给你看看,就知道我是不是山寨的人了。
所以操作逻辑是这样
1.在A上生成公钥 私钥 。
2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了)
3.Server A向Server B发送一个连接请求。
4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个 字符串 ,并用Server A的公钥加密,发送给Server A。
5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。
具体操作非常简单了,可以参考。这里就不描述了。