码迷,mamicode.com
首页 > 其他好文 > 详细

Hadoop分布式模式下SSH免密码登录

时间:2014-11-30 20:00:08      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

1.Hadoop中为什么要配置免密码登录

     最近在学习Hadoop,在集群中,Hadoop控制脚本依赖SSH来执行针对整个集群的操作。例如,某个脚本能够终止并重启集群中的所有守护进程。所以,需要安装SSH,但是,SSH远程登陆的时候,需要密码验证,集群中数千台计算机,数千台计算机都需要手工输入密码,这是不太现实的,所以,就需要配置SSH无密码登录。

 

2.环境

     Hadoop中有三个节点,分别是centosNameNode,centosDateNode1,centosDateNode2,我们现在要实现的是三个节点间的免密码登录,三个节点的信息如下:

     centosNameNode: 192.168.10.66

     centosDateNode1: 192.168.10.67

     centosDateNode2: 192.168.10.68

 

3.免密码登录的大致流程

   <1>在客户端创建密钥文件

              因为三个节点要相互访问,所以,三个节点都是客户端,也都是服务器端,我们分别在三个节点上创建

          一对密钥文件,密钥文件包括公钥文件(~/.ssh/id_rsa.pub)和私钥文件 (~/.ssh/id_rsa)      

   <2>把公钥文件放到要登录的节点上

              客户端在使用ssh登录到其他节点上的时候,ssh会发送私钥去和其他节点上的公钥去匹配,如果匹配成

          功,那么就会自动登录,而不需要输入密码,这就实现了无密码登录。  所以,客户端要实现免密码登录

          到目标节点上的时候,就需要把公钥写入目标节点上的~/.ssh/authorized_keys中。

              因为三个客户端节点(centosNameNode、centosDateNode1、centosDateNode2)要实现相互间

          免密码登录,所以,每个客户端节点都需要将他们的公钥发送到剩余两个节点上,当然,由于客户端也可

          以ssh到它自己,所以,可以把它自己的公钥也加入到他自己的~/.ssh/authorized_keys,因此,三个客

          户端节点的公钥就相同了,我们可以将公钥全部发送的centosNamNode上,由centosNameNode将各

          个客户端节点的公钥整合到~/.ssh/authorize_keys中,然后,用scp命令将 ~/.ssh/autorized_keys复制

          到其他两个节点中,这样,就实现了客户端节点间相互ssh免密码登录。

   <3>目标节点的配置

              权限问题: .ssh目录的权限必须是700

                                .ssh/authorized_keys文件权限必须是600 
                 配置目标节点:修改sshd配置文件(/etc/ssh/sshd_config)

 

4.客户端创建密钥文件

   <1>查看是否安装了ssh

          一般情况下,系统都自带有ssh,查看ssh是否安装命令:ssh -version,

         bubuko.com,布布扣

         如果没有安装ssh,在命令行下输入:yum install ssh进行安装,可以参考下面的博文

         http://www.cnblogs.com/alaska1131/articles/1659654.html

   <2>在客户端节点创建密钥文件

                查看客户端节点是否已经创建了密钥文件,我们一centosNameNode为例。打开命令行,输入以下

          指令: ls ~/.ssh,查看是否有密钥存在。

          bubuko.com,布布扣

               发现没有密钥文件,也就是没有公钥(id_rsa.pub)和私钥(id_rsa)

               在centosNameNode上面创建密钥,打开命令行,输入以下指令:ssh-keygen -t rsa,注意,这个

          命令行ssh 和 -keygen中间没有空格,如果写成ssh -keygen -t rsa,会报错误:

          Bad escape  character ‘ygen‘

          bubuko.com,布布扣

          输入完ssh-keygen - rsa后,一直默认Enter下去,密码为空就行。如下图所示,说明生成密钥成功

          bubuko.com,布布扣

           然后,继续在命令行下输入ls ~/.ssh,查看是否多了两个文件(id_rsa.pub和id_rsa)

           bubuko.com,布布扣

           好,到这里,客户端节点的密钥文件已经创建完成,按照上述方法,依旧在centosDateNode1节点和

           centosDateNode2节点上一次创建密钥文件。

 

5.将各客户端节点的公钥写入centosNameNode中

   <1>将centosNameNode自己的公钥写入到自己的~/.ssh/authorized_keys中

          打开命令行,输入

   cd ~/.ssh                               #切换目录到~/.ssh下

   ls                                      #再次确认是否有密钥

   cat id_rsa.pub >> authorized_keys       #将公钥写入

      bubuko.com,布布扣

         在命令行下输入vi ~/.ssh/authorized_keys,发现公钥已经写入了

         bubuko.com,布布扣

         OK,然后,就是修改sshd以及上面所提到的authorized_keys以及目录~/.ssh权限的修改  

   <2>centosNameNode中权限以及修改sshd                               

         修改目录~/.ssh以及~/.ssh/authorized_keys文件的权限,打开命令行,输入:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

      bubuko.com,布布扣

   <3>验证自己ssh自己

          打开命令行,输入:

          ssh 192.168.10.66                  #centsoNameNode的ip

          发现并没有要求输入密码,而是自动登陆了,说明自己的配置成功了,事实上Hadoop的伪分布式模

          式就是自己远程登陆自己

          bubuko.com,布布扣

   <4>将其他两个节点的公钥加进来

          登录到centosDateNode1,进入到命令行,输入:

          cd ~/.ssh                                                                                  #进入到ssh目录下面

          ls                                                                                              #检测目录下面是否有密匙

          scp id_rsa.pub roboson@192.168.10.66:/home/roboson      #将文件传递到Ip地址为
                                                                                                         #192.168.10.66(centosNameNode)
                                                                                                         #/home/roboson目录下

         bubuko.com,布布扣

         说明上传成功,然后,登录到centosNameNode上,查看是否收到,输入指令:

          cd /home/roboson                      #切换目录

          ls                                                  #查看目录下的文件

          bubuko.com,布布扣

          如上图所示,说明收到了centosDateNode1的公钥id_rsa.pub

          然后,将公钥写入到centosNameNode的~/.ssh/authorized_keys文件中,打开命令 行,输入指令:

          cat /home/roboson/id_rsa.pub >>~/.ssh/authorized_keys

          bubuko.com,布布扣

           然后,输入vi ~/.ssh/authorized_keys指令,发现文件中又多了一堆数字

           bubuko.com,布布扣

          接下来,重启sshd(上面有),登录到centosDateNode,然后,在centosDateNode中,用ssh远程登陆

          到centosNameNode中,看是否需要密码验证

          bubuko.com,布布扣

          有的时候,会报这样的错

          Agent admitted failure to sign using the key

          解决方法:

          在当前用户下执行命令:

          ssh-add

          然后,利用同样的方法,将centosDateNode2的公钥也加入。

 

6.将在centosNameNode中整合的文件掺入剩余两个节点

     登录到centosNameNode上,然后,打开命令行,输入指令:

     cd ~/.ssh

     scp authorized_keys 192.168.10.67:/home/roboson/.ssh/authorized_keys  #将整合好的   

                                                                                                                            #ahthorized_keys传递给

                                                                                                                           #centosDateNode1

     ssh 192.168.10.67                      #远程登陆到centosDateNode1上,看是否需要密码

     bubuko.com,布布扣

 

 

Hadoop分布式模式下SSH免密码登录

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/robert-blue/p/4133467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!