Hadoop分布式模式下SSH免密碼登錄


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,

         

         如果沒有安裝ssh,在命令行下輸入:yum install ssh進行安裝,可以參考下面的博文

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

   <2>在客戶端節點創建密鑰文件

                查看客戶端節點是否已經創建了密鑰文件,我們一centosNameNode為例。打開命令行,輸入以下

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

          

               發現沒有密鑰文件,也就是沒有公鑰(id_rsa.pub)和私鑰(id_rsa)

               在centosNameNode上面創建密鑰,打開命令行,輸入以下指令:ssh-keygen -t rsa,注意,這個

          命令行ssh 和 -keygen中間沒有空格,如果寫成ssh -keygen -t rsa,會報錯誤:

          Bad escape  character 'ygen'

          

          輸入完ssh-keygen - rsa后,一直默認Enter下去,密碼為空就行。如下圖所示,說明生成密鑰成功

          

           然后,繼續在命令行下輸入ls ~/.ssh,查看是否多了兩個文件(id_rsa.pub和id_rsa)

          

           好,到這里,客戶端節點的密鑰文件已經創建完成,按照上述方法,依舊在centosDateNode1節點和

           centosDateNode2節點上一次創建密鑰文件。

 

5.將各客戶端節點的公鑰寫入centosNameNode中

   <1>將centosNameNode自己的公鑰寫入到自己的~/.ssh/authorized_keys中

          打開命令行,輸入

   cd ~/.ssh                               #切換目錄到~/.ssh下

   ls                                      #再次確認是否有密鑰

   cat id_rsa.pub >> authorized_keys       #將公鑰寫入

      

         在命令行下輸入vi ~/.ssh/authorized_keys,發現公鑰已經寫入了

         

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

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

         修改目錄~/.ssh以及~/.ssh/authorized_keys文件的權限,打開命令行,輸入:

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

     

   <3>驗證自己ssh自己

          打開命令行,輸入:

          ssh 192.168.10.66                  #centsoNameNode的ip

          發現並沒有要求輸入密碼,而是自動登陸了,說明自己的配置成功了,事實上Hadoop的偽分布式模

          式就是自己遠程登陸自己

         

   <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目錄下

         

         說明上傳成功,然后,登錄到centosNameNode上,查看是否收到,輸入指令:

          cd /home/roboson                      #切換目錄

          ls                                                  #查看目錄下的文件

         

          如上圖所示,說明收到了centosDateNode1的公鑰id_rsa.pub

          然后,將公鑰寫入到centosNameNode的~/.ssh/authorized_keys文件中,打開命令 行,輸入指令:

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

          

           然后,輸入vi ~/.ssh/authorized_keys指令,發現文件中又多了一堆數字

          

          接下來,重啟sshd(上面有),登錄到centosDateNode,然后,在centosDateNode中,用ssh遠程登陸

          到centosNameNode中,看是否需要密碼驗證

          

          有的時候,會報這樣的錯

          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上,看是否需要密碼

     

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM