天天看點

CentOS 6.5下搭建hadoop 2.6.0叢集(三):SSH無密碼驗證配置

Hadoop運作過程中需要管理遠端Hadoop守護程序,在Hadoop啟動以後,NameNode是通過SSH(Secure Shell)來啟動和停止各個DataNode上的各種守護程序的。這就必須在節點之間執行指令的時候是不需要輸入密碼的形式,故我們需要配置SSH運用無密碼公鑰認證的形式,這樣NameNode使用SSH無密碼登入并啟動DataName程序,同樣原理,DataNode上也能使用SSH無密碼登入到NameNode

安裝和啟動SSH協定

我們需要兩個服務:ssh和rsync,現在需要檢視是否已經安裝。可以通過下面指令檢視結果顯示如下:

[[email protected] java]# rpm -qa | grep openssh
openssh-askpass-p1-el6.x86_64
openssh-p1-el6.x86_64
openssh-server-p1-el6.x86_64
openssh-clients-p1-el6.x86_64
[[email protected] java]# rpm -qa | grep rsync
rsync--el6_4.x86_64
           

假設沒有安裝ssh和rsync,可以通過下面指令進行安裝。

yum install ssh     //安裝SSH協定
yum install rsync   //(rsync是一個遠端資料同步工具,可通過LAN/WAN快速同步多台主機間的檔案)
service sshd restart    //啟動服務
           

配置Master無密碼登入所有Salve

SSH無密碼原理

Master(NameNode | JobTracker)作為用戶端,要實作無密碼公鑰認證,連接配接到伺服器Salve(DataNode | Tasktracker)上時,需要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,而後将公鑰複制到所有的Slave上。當Master通過SSH連接配接Salve時,Salve就會生成一個随機數并用Master的公鑰對随機數進行加密,并發送給Master。Master收到加密數之後再用私鑰解密,并将解密數回傳給Slave,Slave确認解密數無誤之後就允許Master進行連接配接了。這就是一個公鑰認證過程,其間不需要使用者手工輸入密碼。重要過程是将用戶端Master複制到Slave上。

Master機器上生成密碼對

用普通使用者權限在Master節點上執行以下指令:

[[email protected] ~]$ ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cls/.ssh/id_rsa): 
Your identification has been saved in /home/cls/.ssh/id_rsa.
Your public key has been saved in /home/cls/.ssh/id_rsa.pub.
The key fingerprint is:
e9::d:c6:c6:eb:::f6:b:e7:e2:c7::f: [email protected]
The key's randomart image is:
+--[ RSA ]----+
|                 |
|                 |
|                 |
|     o o .       |
|      B S  .     |
|     o ++.o o E  |
|      .+.o.=.o   |
|     .. ..oo+    |
|      .. .o+.    |
+-----------------+
           

該操作會預設在”/home/cls/”下生成”.ssh”檔案夾,且”.ssh”檔案下包含兩個剛生産的無密碼密鑰對。

然後是修改檔案夾”.ssh”的使用者權限,把他的權限修改為”700”,用下面指令執行:

備注:如果不進行,即使你按照前面的操作設定了”authorized_keys”權限,并配置了”/etc/ssh/sshd_config”,還重新開機了sshd服務,在Master能用”ssh localhost”進行無密碼登入,但是對Slave1.Hadoop進行登入仍然需要輸入密碼,就是因為”.ssh”檔案夾的權限設定不對。這個檔案夾”.ssh”在配置SSH無密碼登入時系統自動生成時,權限自動為”700”,如果是自己手動建立,它的組權限和其他權限都有,這樣就會導緻RSA無密碼遠端登入失敗。

接着在Master節點上做如下配置,把id_rsa.pub追加到授權的key裡面去。

[[email protected] .ssh]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[[email protected] .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub
           

在驗證前,需要做兩件事兒。第一件事兒是修改檔案”authorized_keys”權限(權限的設定非常重要,因為不安全的設定安全設定,會讓你不能使用RSA功能),另一件事兒是用root使用者設定”/etc/ssh/sshd_config”的内容。使其無密碼登入有效。

修改檔案”authorized_keys”

操作如下:

cls@Master .ssh]$ chmod  ~/.ssh/authorized_keys
[cls@Master .ssh]$ ll
total 
-rw-------.  cls cls   Dec  : authorized_keys
-rw-------.  cls cls  Dec  : id_rsa
-rw-r--r--.  cls cls   Dec  : id_rsa.pub
           

如果不進行設定,在驗證時,仍然提示你輸入密碼。

設定SSH配置

用root使用者登入伺服器修改SSH配置檔案”/etc/ssh/sshd_config”的下列内容。

RSAAuthentication yes   //啟用 RSA 認證
PubkeyAuthentication yes    //啟用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys //公鑰檔案路徑(和上面生成的檔案同)
           

設定完之後記得重新開機SSH服務,才能使剛才設定有效。

[[email protected] .ssh]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
           

退出root登入,使用hadoop普通使用者驗證是否成功。

[[email protected] .ssh]$ ssh localhost
The authenticity of host 'localhost (::)' can't be established.
RSA key fingerprint is :c:::c::dd:::c:a4:e:d:::f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Last login: Sun Dec  ::  from localhost
           

從以上内容中得知無密碼登入本級已經設定完畢,之後我們需要在每個節點上執行以上操作。

最後我們需要将每個節點中的id_rsa.pub追加到其他節點的檔案中,以Mster.hadoop機器為例:

[cls@Master .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[cls@Master .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[cls@Master .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
           

其他節點以此類推,最後達到的效果是:叢集内任何一個節點都能無密碼登入上叢集中的任意節點。

繼續閱讀