# linux 免密登录 为了保证一台Linux主机的安全,每个主机登录的时候都需要账号密码。但是很多时候为了操作方便,需要设置集群互信主机之间的SSH免密码登录。 ## 一、公钥与私钥 大家可能都知道密钥的概念,在传统的加密算法中,加密和解密使用的是同一个密钥,一旦该密钥泄露,那么加密内容将被破解。通常在现代密码体系中加密和解密是采用不同的密钥,也就是大家经常听说到的**非对称加密**。 **非对称加密算法的公钥私钥的原则:** 1. 一个公钥对应一个私钥,二者是成对出现的。 2. 公钥私钥密钥对需要有一个发布方,发布方自己保存的密钥通常被称为私钥,公开发布给其他方使用的密钥被称为公钥。 3. 公钥加密结果,对应的私钥能解;私钥加密结果,对应的的公钥能解。 ## 二、ssh免密登录原理 ![img](http://pic.61dz.com/pic/047a86faccdcd3868a806f285067c482) - 如果host1希望免密登录host2,那么密钥对是host1发布的。 - 让host2信任host1的公钥,host1即可免密登录host2。所以host1需要将自己的公钥,在host2服务器上保存一份(复制密钥) ## 三、密钥文件 在被SSH登录的主机中,都有一个存储来登录的主机的公钥的文件,它的名字叫做authorized_keys,它的位置就在`/<登录用户根目录>/.ssh`目录中(注:如果这台主机没有被设置任何免秘钥登录,这个文件缺省是不存在的) ![img](http://pic.61dz.com/pic/96e41f3b1263479ec15bf8bb89a21275_1034x256.png) 在authorized_keys文件中,存储着能够登录本地主机的其他各个主机的身份信息。如果使用rsa算法生成的密钥,文件的存储格式都是以ssh-rsa开头的一组字符串。 ## 四、密码生成与密钥分发(免密登录) ### 4.1.环境准备 主机环境 | ip | 主机名称 | 规划用户 | | :------------ | :------- | :------- | | 192.168.1.111 | zimug1 | kafka | | 192.168.1.112 | zimug2 | kafka | | 192.168.1.113 | zimug3 | kafka | ### 4.2.生成密钥对 因为我们后续为了搭建kafka集群,并且使用的kafka用户,所以生成密钥对之前用kafka用户登录主机。首先在zimug1主机执行下面的命令。 ``` ssh-keygen -t rsa ``` 出现提示输入信息,一路回车即可。 ![img](http://pic.61dz.com/pic/aa7e8008b5b53458903f79708f9ba4ec_829x466.png) 执行完成之后,我们会在`/home/kafka/.ssh`目录下看到下面的这两个文件。通常认为前者是公钥,后者是私钥。 ``` id_rsa.pub id_rsa ``` ### 4.3.密钥处理 - 将公钥保存到authorized_keys文件中 ```sh cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys ``` - 将公钥分发给zimug2、zimug3主机。按提示输入kafka登陆密码 ```sh ssh-copy-id -i ~/.ssh/id_rsa.pub -p22 kafka@zimug2; ``` 需要分开执行,因为需要输入密码。 ```sh ssh-copy-id -i ~/.ssh/id_rsa.pub -p22 kafka@zimug3; ``` 这样,我们zimug1免密登录zimug2、zimug3的配置工作就完成了。 ### 4.4.免密登录测试 在zimug1主机上登录zimug2(或zimug3)主机,输入如下命令,不需要输入密码。你会发现登录主机的切换如下,不需要密码就完成登陆了。 ``` [kafka@zimug1 ~]$ ssh kafka@zimug2 Last login: Sat Feb 19 22:07:13 2022 from 192.168.137.10 [kafka@zimug2 ~]$ ``` 如果想退回到zimug1服务器,使用`exit`命令。 如果此时你执行免密登陆测试失败,请执行这三个命令修改主目录及文件权限。如果还不行,重新执行上面的步骤。 ``` chmod 755 ~/; chmod 700 ~/.ssh/; chmod 600 ~/.ssh/authorized_keys; ``` ### 4.5 重复 在zimug2、zimug3服务器上重复以上步骤,就可以完全实现三台服务器之间ssh免密登录互通互联。