今天在搭建Linux集群的时候出现了ssh免密登陆的要求,联想到Oracle的远程连接,发现两者形式不同,但设计思想有相似之处,而且很巧的是,两者的配置文件数量都为3个,且都有一个记录远程访问的列表。需要阅读Oracle远程访问的可以看这个链接:https://www.jianshu.com/p/de93cec4dc2d
在搭建Linux集群的时候,大部分是使用ssh进行连接,在集群的情况下,如果每次启动一台机器都需要手动输入密码,工作量将是非常恐怖的。而使用免密登录的话,主服务器就能批量启动从服务器的应用,所以,免密登录的配置是集群部署的必备环节。
免密连接主要涉及三个文件:
- id_rsa 本地私钥
- id_rsa.pub 本地公钥
- authorized_keys 远程公钥列表
生成密钥(私钥 + 公钥)
ssh的免密登陆通过私钥+公钥的组合来实现,我们可以通过命令
$ ssh-keygen -t rsa
来生成他们,过程中遇到提示直接回车到最后,看到以下页面则密钥生成成功。

系统提示我们,在/root/.ssh/目录下生成了两个文件: id_rsa和id_rsa.pub。前者是私钥,后者就是公钥了。
如果我们不是root用户的话,生成的秘钥会在自己目录下,例如/home/user1/.ssh/。
进入目录里查看:

注册公钥
私钥和公钥的作用是什么呢,我们将私钥保存在本地,公钥传到要连接的服务器上,这一过程我们取名为公钥的注册。
首先在服务器中也要进行密钥生成的操作。
$ ssh-keygen -t rsa
这样才会出现.ssh目录。
方法一 自动注册
使用命令
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.50.5.57
来将公钥通过ssh协议复制到服务器上正确的位置,其实也就是服务器的/root/.ssh目录下,ssh-copy-id命令会帮我们做好这一切。
方法二 手动注册
我们也可以手动来,就是把本地的id_rsa.pub文件内容增加到服务器的authorized_keys文件中。
可以通过ssh协议直接将本地公钥传到服务器上:
$ scp id_rsa.pub root@10.50.5.57:/root/.ssh
输入密码后,文件就传送过去了。

切换到服务器,可以发现本地出现了一个新的id_rsa.pub文件,我们通过cat命令把其中的内容添加进authorized_keys文件里:
$ cat id_rsa.pub >> authorized_keys
这样就大功告成了,本地公钥已经加入了服务器的免密公钥列表。
当我们把自己的公钥加入服务器的authorized_keys中后,服务器就知道我们是要进行免密登录的了。authorized_keys记录了可以免密登录到本机的所有客户端的公钥。这一过程如下图:

例如,当我们通过命令
$ ssh root@10.50.5.57
访问10.50.5.57这个服务器上的root用户的时候,服务器生成一段随机字符串,使用公钥加密,发送给我们,我们再用私钥解密,发回给服务器,如果我们成功破解了公钥的加密,那么就证明了我们的身份。流程如下图:

免密登录
激动人心的登陆时刻,使用命令:
$ ssh root@10.50.5.57
系统没有提示我们输入密码就登陆成功了,免密登录完成!
