Hadoop中ssh+IP、ssh+別名免祕鑰登陸配置

一、爲何要進行 SSH 無密碼驗證配置?java

  Hadoop運行過程當中須要管理遠端Hadoop守護進程,在Hadoop啓動之後,NameNode是經過SSH(Secure Shell)來啓動和中止各個DataNode上的各類守護進程的。這就必須在節點之間執行指令的時候是不須要輸入密碼的形式,故咱們須要配置SSH運用無密碼公鑰認證的形式,這樣NameNode使用SSH無密碼登陸並啓動DataName進程,一樣原理,DataNode上也能使用SSH無密碼登陸到NameNode。linux

 

二、爲何要使用 SSH?算法

  在linux系統中,ssh是遠程登陸的默認工具,由於該工具的協議使用了RSA/DSA的加密算法.該工具作linux系統的遠程管理是很是安全的。telnet,由於其不安全性,在linux系統中被擱置使用了。安全

 

三、SSH 原理服務器

  Master(NameNode | JobTracker)做爲客戶端,要實現無密碼公鑰認證,鏈接到服務器Salve(DataNode | Tasktracker)上時,須要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,然後將公鑰複製到全部的Slave上。當Master經過SSH鏈接Salve時,Salve就會生成一個隨機數並用Master的公鑰對隨機數進行加密,併發送給Master。Master收到加密數以後再用私鑰解密,並將解密數回傳給Slave,Slave確認解密數無誤以後就容許Master進行鏈接了。這就是一個公鑰認證過程,其間不須要用戶手工輸入密碼。重要過程是將客戶端Master複製到Slave上。併發

  

 

 四、配置過程ssh

  咱們這裏有三臺機器,分別是:工具

  hostname                ipaddress                subnet mask                  geteway    oop

一、 master     192.168.146.200    255.255.255.0      192.168.146.2加密

二、 slave1      192.168.146.201    255.255.255.0      192.168.146.2

三、 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地址

相關文章
相關標籤/搜索