SSH免密码登录及原理
场景
有两台机器A(192.168.33.100),B(192.168.33.110),A为客户端,B为服务端,想要在A上通过ssh免密码登录到B
在A机器上生成公钥/私钥对
[gq@A ~]$ ssh-keygen -t rsa
回车、回车、回车一直回车就好!
/home/gq 下生成 .ssh目录,.ssh下有id_rsa和id_rsa.pub
将A机器上的id_rsa.pub复制到B机器上
[gq@A ~]$ scp .ssh/id_rsa.pub gq@192.168.33.110:/home/gq/id_rsa.pub gq@192.168.33.110's password: id_rsa.pub 100% 231 0.4KB/s 00:00
再将从A机复制的id_rsa.pub添加到B机的.ssh/authorzied_keys文件里,并且authorized_keys的权限要600
[gq@B ~]$ cat id_rsa.pub >> .ssh/authorized_keys [gq@B ~]$ chmod 600 .ssh/authorized_keys
A机登录B机
[gq@A ~]$ ssh 192.168.1.110 The authenticity of host '192.168.33.110 (192.168.33.110)' can't be established. RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.33.110' (RSA) to the list of known hosts. Last login: Mon Jul 1 16:26:35 2018 from gq [gq@B ~]$
基于密钥的验证
这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。
免密码登录原理
图解,server A免登录到server B:
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要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。