Spark分布式搭建(3)——ubuntu下ssh无密码登入(设置ssh公钥认证)

0.前言

Spark集群搭建在Hadoop集群之上,而Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。

下面简单介绍下SSH基本原理

1)SSH基本原理

SSH之所以能够保证安全,原因在于它采用了公钥加密。过程如下:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

根据SSH运行原理,再来了解下SSH无密码登入原理。

2)SSH无密码登入原理

Master(NameNode | JobTracker)要实现无密码公钥认证,连接到Worker(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Worker上。当Master通过SSH连接Worker时,Worker就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Worker,Worker确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。

总结:简单来说就是在每台电脑上生成一对密钥,包括一个公钥和一个私钥,然后把所有机器的公钥整合在一起,变成一个公钥集(其实是整合到一个文件里),并把这个公钥集发给所有机器。然后任何一台机器要访问其他机器时,都会用这个公钥来解密从发送者那里用私钥加密后发来的加密请求,就相当于机器用公钥自动输了密码,所以实现了无密码登入。

1.具体操作分4步

1.1 安装ssh

注意:如果你的Ubuntu没有安装SSH,请首先安装SSH
Ubuntu下安装ssh:apt-get install ssh(非root用户前面加sudo)
这里写图片描述

1.2 生成秘钥对

输入指令:ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
因为.ssh文件在/root/目录下,所以也可以:
ssh-keygen -t dsa -P ” -f /root/.ssh/id_dsa
从截图提示可以看出,这个命令生成了一个id_dsa(私钥)文件,和一个id_dsa.pub(公钥)文件。可以进入cd /root/.ssh,用ls命令查看。
这里写图片描述

先在Master和所有Worker节点完成上述2步。

1.3 用cat命令追加公钥

回到Master节点操作。
输入指令:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
这里写图片描述
这部完成之后,就可以ssh登入本机来看是否已经可以无密码登入本机了。如下图,已经可以无密码登入啦。
这里写图片描述

1.4 ssh无密码登入所有机器

上面步骤里的这个authorized_keys文件就相当于一个公钥集文件了。只要把所有机器的公钥按上面的第三步都追加到这个authorized_keys文件里,然后复制给所有机器,放到/root/.ssh目录里,相当于每台机器都有了所有机器的公钥。原理请看前言。

分为4小步骤(针对我时4台虚拟机,如果再多,重复操作就好)
1).把Master上/root/.ssh目录下的authorized_keys文件,复制到worker1节点的/root/.ssh目录下,在用cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys命令,把worker1生成的公钥加入到这个authorized_keys文件中。

2).再把上步骤Worker1上/root/.ssh目录下的authorized_keys文件,复制到worker2节点的/root/.ssh目录下,在用cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys命令,把worker2生成的公钥加入到这个authorized_keys文件中。

3).再把上步骤Worker2上/root/.ssh目录下的authorized_keys文件,复制到worker3节点的/root/.ssh目录下,在用cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys命令,把worker3生成的公钥加入到这个authorized_keys文件中。这时的authorized_keys文件就包含4台机器所有的公钥了。

4).最后把Worker3上/root/.ssh目录下的authorized_keys文件复制到Master,Worker1,Worker2的/root/.ssh目录下,覆盖原来的authorized_keys文件。

我在虚拟机中做这步,本想用scp命令把Master节点已经生成的authorized_keys文件发送到Worker上的/root/.ssh目录里,但是密码一直不能输入正确,不知道为什么。所有最后直接用U盘拷贝authorized_keys文件,来操作。

到这里就完成了ssh无密码登入了。登入Worker1来验证下:
这里写图片描述

本文前言部分参考博客:
http://www.cnblogs.com/lanxuezaipiao/p/3525554.html


XianMing

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值