Hadoop完全分布式环境搭建之生成ssh秘钥并配置

首先说明,我模拟hadoop集群,创建了三个节点,分别为master,slave1,slave2,他们在本文配置基本一样,请各位举一反三。

还有,在做这步之前请在各节点中都安装好jdk(版本越高越好,当然,与你的hadoop版本协调)与openssh


接下来我们依然做点准备工作

1.给本机起名,便于访问,就是不要使用我们的ip了


指令:vim /etc/hostname


以slave2节点举例,在编辑时先按i进入inster模式,编辑完成后按esc,输入:wq保存退出

2.查看本机ip


指令:ifconfig -a

           信息过多的话shift+[PgUp/PgDown]进行翻页

记录一下ip

3.配置hosts文件,也就是主机名与ip的映射


以我为例,三个节点都要配置,因为可能使用ssh访问自身节点(这个截图是master节点,slave1,slave2都一样)

到这里为止,准备工作结束


现在开始生成ssh(以下虽然我以slave2在截图,当请各位举一反三)


指令:ssh-keygen -t rsa

其中-t配置秘钥类型,我们用rsa


中间会询问你一些文件位置,描述等,我们都回车跳过,这样ssh秘钥生成完毕,他放在.ssh隐藏文件夹下,我们去看看


指令:cd .ssh

            ls

我们看到.ssh文件夹下有两个文件,id_rsa与id_rsa.pub,分别是私有与公有秘钥

我们要把公有秘钥复制到一个authorized_keys文件内,这个文件的作用就是完成无密码访问,具体原因我们稍后再讲


指令:cp id_rsa.pub authorized_keys

            cat authorized_keys

注意!这里的一步,只需要创建master的authorized_keys文件即可,因为我已经创建过了,但为了截图,我在slave2中又写了一遍,但是!我们会在后续一步中用master的authorized_keys文件覆盖这里我创建的slave2的authorized_keys文件

将master的authorized_keys文件传送给slave1和slave2


指令:scp authorized_keys slave1:~/.ssh/

这里需要输入slave1的密码


我们在slave1中查看一下发送过来的authorized_keys文件,发现文件末尾写着master,成功了(其实这一步就是为了让每个节点都拥有其余节点的id_rsa.pub,即公钥,你也可以用复制粘贴做)


指令:cat id_rsa.pub >> authorized_keys

这里有个小知识cat指令中 >>代表追加,>代表覆盖,那么这里就是把slave1的id_rsa.pub追加到我们刚才发送过来的文件末尾


...(此处为省略号)

继续发送与追加,我们的最终目的就是让每个节点都拥有所有的公钥,这里我就不赘述了


测试免密码链接


指令:ssh master

我们在slave2中链接master,注意看指令域已经变成了master,说明我们连接成功了,而且没有输入过密码

至此,我们大功告成!下面讲解下ssh免密码登录的具体机制


首先我们要清楚一件事,就是rsa密码,这是一种非对称密码,也就是说,它分为公钥私钥公钥面向全世界,私钥只能自己拥有(别人知道了就不安全了)。至于其具体的密码学或者说数学知识,最传统的密码学教科书都会有。公钥私钥有一个特性,那就是公钥加密的文件只能私钥解密,基于这个特性,我们来建立一些安全措施,就是我们之前使用的ssh。

回想下我们刚才的配置工作,最重要的就是把所有的公钥卸载authorized_keys文件中,那么,当我们的节点访问其余节点时,他会遍历authorized_keys文件,使用其中的公钥加密一个即将约定的密码,这个加密后的密码只能由私钥进行解密,如果被访问节点允许访问,就会保留这个密码,并返回响应,接下来,两节点使用密码访问即可,不需要我们手动输入。

当然了,为了安全,手段不止这一种。我这里也是简略介绍,有兴趣请查阅文献资料深入学习。

猜你喜欢

转载自blog.csdn.net/xqz583722585/article/details/80281906