Hadoop中ssh+IP、ssh+別名免秘鑰登錄配置


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

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

 

2、為什么要使用 SSH?

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

 

3、SSH 原理

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

  

 

 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

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

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

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

第一步:確認系統已經安裝了 SSH

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

rpm –qa | grep openssh
rpm –qa | grep rsync

  出現如下信息,則已經安裝了SSH

  

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

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

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

 

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

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

ssh-keygen –t rsa –P ''

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

   

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

  

 

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

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

  

第四步:修改文件"authorized_keys"權限

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

chmod 600 ~/.ssh/authorized_keys

  

 

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

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

vi /etc/ssh/sshd_config 

  

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

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

  

第六步:重啟服務

service sshd restart

  

 

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

scp ~/.ssh/id_rsa.pub 遠程用戶名@遠程服務器IP:~/

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

  

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

  

 

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

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

mkdir ~/.ssh      //創建 .ssh 的文件夾
chmod 700 ~/.ssh    //給 .ssh 文件夾權限

  

 

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

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm -rf ~/id_rsa.pub

  

 

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

vi /etc/ssh/sshd_config 
service sshd restart

  

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

ssh 遠程服務器IP

 

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

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

 

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

vi /etc/hosts

  

 

 

注意:我們可以使用命令

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

那么這條命令的意思是:

a) 先scp 將本機的id_rsa.pub復制到對方機器的.ssh目錄下

b) 在對方機器上執行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 導入公鑰

這樣寫我們可以省略很多步驟。  

注意:如果第一次使用該命令時,我們要先在 機器上創建 .ssh 的文件夾,並且賦予 700 的權限。

 

設置用 SSH 別名 登錄

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

在其中增加:

保存后退出,然后 設置 config 權限為 600

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

 


免責聲明!

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



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