天天看點

SSH無密碼驗證一、安裝和啟動SSH協定 二、配置Master無密碼登入所有Salve

一、安裝和啟動SSH協定

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

sudo apt-get install ssh 安裝SSH協定

sudo apt-get install rsync

service sshd restart 啟動服務

(rsync是一個遠端資料同步工具,可通過LAN/WAN快速同步多台主機間的檔案)

確定所有的伺服器都安裝,上面指令執行完畢,各台機器之間可以通過密碼驗證互相登。

Last login: Mon Oct 29 14:01:11 2012 from 10.196.80.99

hadoop@namenode:~$ ssh localhost

The authenticity of host 'localhost (127.0.0.1)' can't be established.

ECDSA key fingerprint is c0:b3:7d:6d:17:94:02:e1:e4:67:39:4f:08:ff:74:cf.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

hadoop@localhost's password:

… …

Last login: Mon Oct 29 14:25:47 2012 from 10.196.80.99

hadoop@namenode:~$

hadoop@namenode:~$ ssh datanode1

The authenticity of host 'datanode1 (10.196.80.91)' can't be established.

ECDSA key fingerprint is dc:8b:7b:82:25:74:0c:ec:15:a7:3b:2a:e6:c3:a0:2e.

Warning: Permanently added 'datanode1,10.196.80.91' (ECDSA) to the list of known hosts.

hadoop@datanode1's password:

Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic-pae i686)

hadoop@datanode1:~$

二、配置Master無密碼登入所有Salve

1 )SSH無密碼原理

        Master(NameNode |JobTracker)作為用戶端,要實作無密碼公鑰認證,連接配接到伺服器Salve(DataNode |Tasktracker)上時,需要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,而後将公鑰複制到所有的Slave上。

        當Master通過SSH連接配接Salve時,Salve就會生成一個随機數并用Master的公鑰對随機數進行加密,并發送給Master。Master收到加密數之後再用私鑰解密,并将解密數回傳給Slave,Slave确認解密數無誤之後就允許Master進行連接配接了。這就是一個公鑰認證過程,其間不需要使用者手工輸入密碼。

        重要過程是将用戶端Master複制到Slave上。

2 )Master機器上生成密碼對

        在Master節點上執行以下指令:

ssh-keygen –t rsa –P ''

        這條指令是生成其無密碼密鑰對,詢問其儲存路徑時直接回車采用預設路徑。生成的密鑰對:id_rsa和id_rsa.pub,預設存儲在"/home/hadoop/.ssh"目錄下。

hadoop@namenode:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/hadoop/.ssh/id_rsa.

Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.

The key fingerprint is:

c8:5e:3e:c1:9b:52:6f:24:a5:e4:c1:1c:00:8d:fb:3b hadoop@namenode

The key's randomart image is:

+--[ RSA 2048]----+

| .+... |

| . .o . |

| . = . |

| .. = + |

| .o S . |

| ..+ B |

| o.= o |

| E. o |

| . |

+-----------------+

        檢視"/home/hadoop/"下是否有".ssh"檔案夾,且".ssh"檔案下是否有兩個剛生産的無密碼密鑰對。

hadoop@namenode:~/.ssh$ cat id_rsa.pub >> authorized_keys

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

hadoop@namenode:~/.ssh$ chmod 600 authorized_keys

        備注:如果不進行設定,在驗證時,扔提示你輸入密碼,在這裡花費了将近半天時間來查找原因。

3)  設定SSH配置

        用root使用者登入伺服器修改SSH配置檔案"/etc/ssh/sshd_config"的下列内容。(在Ubuntu12.04系統裡面,貌似不用修改此檔案)

1.RSAAuthentication yes # 啟用 RSA 認證

2.PubkeyAuthentication yes # 啟用公鑰私鑰配對認證方式

3.AuthorizedKeysFile /home/hadoop/.ssh/authorized_keys # 公鑰檔案路徑(和上面生成的檔案同)

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

hadoop@namenode:~/.ssh$ ssh localhost

* Documentation: https://help.ubuntu.com/

191 packages can be updated.

51 updates are security updates.

Last login: Mon Oct 29 14:43:08 2012 from localhost

hadoop@namenode:~$  

        從上圖中得知無密碼登入本級已經設定完畢,接下來的事兒是把公鑰複制所有的Slave機器上。使用下面的指令格式進行複制公鑰:

        scp ~/.ssh/id_rsa.pub 遠端使用者名@遠端伺服器IP:~/

        例如:

        scp ~/.ssh/id_rsa.pub 

[email protected]:~/

        上面的指令是複制檔案"id_rsa.pub"到伺服器IP為"10.196.80.91"的使用者為"hadoop"的"/home/hadoop/"下面。

4 )把namenode上的公鑰複制到datanode1上

        先在每個slave機器的/home/hadoop/下建立  .ssh 檔案夾。

hadoop@namenode:~/.ssh$ scp authorized_keys hadoop@datanode1:/home/hadoop/.ssh/

authorized_keys 100% 397 0.4KB/s 00:00

hadoop@namenode:~/.ssh$

        從上圖中我們得知,已經把檔案"id_rsa.pub"傳過去了,因為并沒有建立起無密碼連接配接,是以在連接配接時,仍然要提示輸入輸入database1伺服器使用者hadoop的密碼。為了確定确實已經把檔案傳過去了,用SecureCRT登入datanode1:10.196.80.91伺服器,檢視"/home/hadoop/"下是否存在.ssh這個檔案夾。存在的話然後是修改檔案夾".ssh"的使用者權限,把他的權限修改為"700",用下面指令執行:

chmod 700 ~/.ssh

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

5 )追加到授權檔案"authorized_keys"

        到目前為止Master.Hadoop的公鑰也有了,檔案夾".ssh"也有了,且權限也修改了。這一步就是把Master.Hadoop的公鑰追加到Slave1.Hadoop的授權檔案"authorized_keys"中去。使用下面指令進行追加并修改"authorized_keys"檔案權限:

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

chmod 600 ~/.ssh/authorized_keys

        用root使用者修改"/etc/ssh/sshd_config"

        具體步驟參考前面Master.Hadoop的"設定SSH配置",具體分為兩步:第1是修改配置檔案;第2是重新開機SSH服務。

        【Ubuntu下不用這一步操作貌似也是可以的。】

        用namenode使用SSH無密碼登入datanode*

        目前面的步驟設定完畢,就可以使用下面指令格式進行SSH無密碼登入了。

        ssh 遠端伺服器IP

        最後記得把所有Slave節點的"/home/hadoop/.ssh"目錄下的"id_rsa.pub"檔案删除掉。

rm –r ~/id_rsa.pub

        到此為止,我們經過前5步已經實作了從"Master"到"Slave1"SSH無密碼登入,下面就是重複上面的步驟把剩餘的兩台(Slave2和Slave3)Slave伺服器進行配置。這樣,我們就完成了"配置Master無密碼登入所有的Slave伺服器"。

6 )配置所有Slave無密碼登入Master

        和Master無密碼登入所有Slave原理一樣,就是把Slave的公鑰追加到Master的".ssh"檔案夾下的"authorized_keys"中,記得是追加(>>)。

        操作之前,先把namenode的/etc/hosts檔案通過scp複制到各個datanodede 的/home/hadoop/Downloads檔案夾下,然後登陸各個namenode使用sudo cp指令覆寫hosts檔案。

其他的datanode類似

 首先建立"datanode2"自己的公鑰和私鑰,并把自己的公鑰追加到"authorized_keys"檔案中。用到的指令如下:

ssh-keygen –t dsa–P ''

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

        接着是用指令"scp"複制"datanode"的公鑰"id_dsa.pub"到"namenode"的"/home/hadoop/"目錄下,并追加到"namenode"的"authorized_keys"中。

在"namenode"伺服器的操作

        用到的指令如下:

cat id_dsa.pub >> authorized_keys

        然後删除掉剛才複制過來的"id_rsa.pub"檔案。

        最後是測試從"datanode"到"namenode"無密碼登入。

        然後剩餘機器同樣的配置。

繼續閱讀