1、為什么要進行 SSH 無密碼驗證配置?

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

 

2、為什么要使用 SSH?

  在linux系統(tǒng)中,ssh是遠程登錄的默認工具,因為該工具的協(xié)議使用了RSA/DSA的加密算法.該工具做linux系統(tǒng)的遠程管理是非常安全的。telnet,因為其不安全性,在linux系統(tǒng)中被擱置使用了。

 

3、SSH 原理

  Master(NameNode | JobTracker)作為客戶端,要實現(xiàn)無密碼公鑰認證,連接到服務(wù)器Salve(DataNode | Tasktracker)上時,需要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,而后將公鑰復(fù)制到所有的Slave上。當(dāng)Master通過SSH連接Salve時,Salve就會生成一個隨機數(shù)并用Master的公鑰對隨機數(shù)進行加密,并發(fā)送給Master。Master收到加密數(shù)之后再用私鑰解密,并將解密數(shù)回傳給Slave,Slave確認解密數(shù)無誤之后就允許Master進行連接了。這就是一個公鑰認證過程,其間不需要用戶手工輸入密碼。重要過程是將客戶端Master復(fù)制到Slave上。

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

 4、配置過程

  我們這里有三臺機器,分別是:

  hostname                ipaddress                subnet mask                  geteway    

1、 master     192.168.146.200    255.255.255.0      192.168.146.2

2、 slave1      192.168.146.201    255.255.255.0      192.168.146.2

3、 slave2      192.168.146.202    255.255.255.0      192.168.146.2

   那么我們想要的結(jié)果是在 master 機器上能不輸入密碼直接登錄到 slave1 和 slave2 機器上。反之在 slave1 上能不輸入密碼登錄到 master 和 slave2 機器上。

  首先我們配置從 master 機器上不輸入密碼登錄到 slave1 機器上。

注意:這幾臺機器我們都以 hadoop 用戶登錄進去。

第一步:確認系統(tǒng)已經(jīng)安裝了 SSH

  我們需要兩個服務(wù),ssh和rsync。可以通過下面命令查看結(jié)果顯示如下:

1
2
rpm –qa | grep openssh
rpm –qa | grep rsync

  出現(xiàn)如下信息,則已經(jīng)安裝了SSH

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

  如果沒有安裝 ssh 和 rsync,則通過下面的命令安裝

1
2
3
yum install ssh 安裝SSH協(xié)議
yum install rsync (rsync是一個遠程數(shù)據(jù)同步工具,可通過LAN/WAN快速同步多臺主機間的文件)
service sshd restart 啟動服務(wù)

  要確保所有的機器都安裝 SSH

 

第二步:master 機器上生成 秘鑰對

   在 master 機器上輸入一下命令: 

1
ssh-keygen –t rsa –P ''

  這條命令是生成無密碼秘鑰對,rsa 是加密算法,-P '' 表示密碼為空。詢問其保存路徑時直接回車采用默認路徑。生成的密鑰對:id_rsa和id_rsa.pub,默認存儲在"/home/hadoop/.ssh"目錄下。

   大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

  查看"/home/hadoop/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產(chǎn)的無密碼密鑰對。

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

第三步:把公鑰 id_rsa.pub追加到授權(quán)的key里面去。

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

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

第四步:修改文件"authorized_keys"權(quán)限

   權(quán)限的設(shè)置非常重要,因為不安全的設(shè)置安全設(shè)置,會讓你不能使用RSA功能,即在進行登錄時仍然要求你輸入密碼。

1
chmod 600 ~/.ssh/authorized_keys

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

第五步:用root用戶登錄服務(wù)器修改SSH配置文件

   注意這里要用 root 用戶登錄,不然沒有權(quán)限修改。

1
vi /etc/ssh/sshd_config

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

把文件中的下面幾條信息的注釋去掉: 

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

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

第六步:重啟服務(wù)

1
service sshd restart

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

第七步:把公鑰復(fù)制所有的 slave 機器上

1
scp ~/.ssh/id_rsa.pub 遠程用戶名@遠程服務(wù)器IP:~/

  這里我們先復(fù)制到 slave1 機器上,IP 為 192.168.146.201

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

  由上圖可知,我們將文件 in_rsa.pub 文件傳過去了,位置是 /home/hadoop。我們登錄到 slave1 機器上查看這個文件

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

第八步:如果是第一次使用該命令,則需要在"/home/hadoop/"下創(chuàng)建".ssh"文件夾,并且修改該文件夾權(quán)限為 “700”

  如果不進行,即使你按照前面的操作設(shè)置了"authorized_keys"權(quán)限,并配置了"/etc/ssh/sshd_config",還重啟了sshd服務(wù),在master能用"ssh localhost"進行無密碼登錄,但是對slave1進行登錄仍然需要輸入密碼,就是因為".ssh"文件夾的權(quán)限設(shè)置不對。這個文件夾".ssh"在配置SSH無密碼登錄時系統(tǒng)自動生成時,權(quán)限自動為"700",如果是自己手動創(chuàng)建,它的組權(quán)限和其他權(quán)限都有,這樣就會導(dǎo)致RSA無密碼遠程登錄失敗。

1
2
mkdir ~/.ssh      //創(chuàng)建 .ssh 的文件夾
chmod 700 ~/.ssh    //給 .ssh 文件夾權(quán)限

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

第九步:將 master 的公鑰追加到 slave1 的授權(quán)文件 “authorized_keys” 中,并修改 該授權(quán)文件的權(quán)限,最后刪除該公鑰(保險起見)

1
2
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys<br>rm -rf ~/id_rsa.pub

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

第十步:在 slave1 機器上重復(fù) 第 五 、六 步操作。

1
2
vi /etc/ssh/sshd_config
service sshd restart

  

第十一步:驗證,我們在 master 機器上使用 SSH 無密碼登錄 slave1 機器

1
ssh 遠程服務(wù)器IP

 大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

注意看我們兩個箭頭,說明已經(jīng)無密碼登錄到 slave1 機器上了。那么這樣就算大功告成。

因此剩下的我們就是重復(fù)的操作,將 master 的公鑰發(fā)送給 slave2,等等。

 

如果我們想直接 ssh 主機名 登錄,那么我們需要配置主機和 ip 地址的映射關(guān)系。

1
vi /etc/hosts

  大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

 

注意:我們可以使用命令

1
ssh-copy-id -i ~/.ssh/id_rsa.pub 用戶名@對方機器IP (注意不要忘記了參數(shù)-i)

那么這條命令的意思是:

1
2
3
a) 先scp 將本機的id_rsa.pub復(fù)制到對方機器的.ssh目錄下
 
b) 在對方機器上執(zhí)行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 導(dǎo)入公鑰

這樣寫我們可以省略很多步驟?! ?/p>

注意:如果第一次使用該命令時,我們要先在 機器上創(chuàng)建 .ssh 的文件夾,并且賦予 700 的權(quán)限。

 

設(shè)置用 SSH 別名 登錄

用 hadoop 用戶登錄系統(tǒng),在 /.ssh 目錄下新建一個 config 文件(如果沒有就新建)

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

在其中增加:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

保存后退出,然后 設(shè)置 config 權(quán)限為 600

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

完成后即可用  ssh host 來登錄主機,而不需要輸入IP地址

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

http://www.cnblogs.com/ysocean/p/6959776.html