Hadoop中ssh+IP、ssh+別名免秘鑰登錄配置
1、為什么要進(jìn)行 SSH 無密碼驗證配置?
Hadoop運(yùn)行過程中需要管理遠(yuǎn)端Hadoop守護(hù)進(jìn)程,在Hadoop啟動以后,NameNode是通過SSH(Secure Shell)來啟動和停止各個DataNode上的各種守護(hù)進(jìn)程的。這就必須在節(jié)點(diǎn)之間執(zhí)行指令的時候是不需要輸入密碼的形式,故我們需要配置SSH運(yùn)用無密碼公鑰認(rèn)證的形式,這樣NameNode使用SSH無密碼登錄并啟動DataName進(jìn)程,同樣原理,DataNode上也能使用SSH無密碼登錄到NameNode。
2、為什么要使用 SSH?
在linux系統(tǒng)中,ssh是遠(yuǎn)程登錄的默認(rèn)工具,因為該工具的協(xié)議使用了RSA/DSA的加密算法.該工具做linux系統(tǒng)的遠(yuǎn)程管理是非常安全的。telnet,因為其不安全性,在linux系統(tǒng)中被擱置使用了。
3、SSH 原理
Master(NameNode | JobTracker)作為客戶端,要實(shí)現(xiàn)無密碼公鑰認(rèn)證,連接到服務(wù)器Salve(DataNode | Tasktracker)上時,需要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,而后將公鑰復(fù)制到所有的Slave上。當(dāng)Master通過SSH連接Salve時,Salve就會生成一個隨機(jī)數(shù)并用Master的公鑰對隨機(jī)數(shù)進(jìn)行加密,并發(fā)送給Master。Master收到加密數(shù)之后再用私鑰解密,并將解密數(shù)回傳給Slave,Slave確認(rèn)解密數(shù)無誤之后就允許Master進(jìn)行連接了。這就是一個公鑰認(rèn)證過程,其間不需要用戶手工輸入密碼。重要過程是將客戶端Master復(fù)制到Slave上。
4、配置過程
我們這里有三臺機(jī)器,分別是:
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 機(jī)器上能不輸入密碼直接登錄到 slave1 和 slave2 機(jī)器上。反之在 slave1 上能不輸入密碼登錄到 master 和 slave2 機(jī)器上。
首先我們配置從 master 機(jī)器上不輸入密碼登錄到 slave1 機(jī)器上。
注意:這幾臺機(jī)器我們都以 hadoop 用戶登錄進(jìn)去。
第一步:確認(rèn)系統(tǒng)已經(jīng)安裝了 SSH
我們需要兩個服務(wù),ssh和rsync??梢酝ㄟ^下面命令查看結(jié)果顯示如下:
- rpm –qa | grep openssh
- rpm –qa | grep rsync
出現(xiàn)如下信息,則已經(jīng)安裝了SSH

如果沒有安裝 ssh 和 rsync,則通過下面的命令安裝
- yum install ssh 安裝SSH協(xié)議
- yum install rsync (rsync是一個遠(yuǎn)程數(shù)據(jù)同步工具,可通過LAN/WAN快速同步多臺主機(jī)間的文件)
- service sshd restart 啟動服務(wù)
要確保所有的機(jī)器都安裝 SSH
第二步:master 機(jī)器上生成 秘鑰對
在 master 機(jī)器上輸入一下命令:
- ssh-keygen –t rsa –P ''
這條命令是生成無密碼秘鑰對,rsa 是加密算法,-P '' 表示密碼為空。詢問其保存路徑時直接回車采用默認(rèn)路徑。生成的密鑰對:id_rsa和id_rsa.pub,默認(rèn)存儲在"/home/hadoop/.ssh"目錄下。
查看"/home/hadoop/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產(chǎn)的無密碼密鑰對。
第三步:把公鑰 id_rsa.pub追加到授權(quán)的key里面去。
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
第四步:修改文件"authorized_keys"權(quán)限
權(quán)限的設(shè)置非常重要,因為不安全的設(shè)置安全設(shè)置,會讓你不能使用RSA功能,即在進(jìn)行登錄時仍然要求你輸入密碼。
- chmod 600 ~/.ssh/authorized_keys
第五步:用root用戶登錄服務(wù)器修改SSH配置文件
注意這里要用 root 用戶登錄,不然沒有權(quán)限修改。
- vi /etc/ssh/sshd_config
把文件中的下面幾條信息的注釋去掉:
RSAAuthentication yes # 啟用 RSA 認(rèn)證
PubkeyAuthentication yes # 啟用公鑰私鑰配對認(rèn)證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)
第六步:重啟服務(wù)
- service sshd restart
第七步:把公鑰復(fù)制所有的 slave 機(jī)器上
- scp ~/.ssh/id_rsa.pub 遠(yuǎn)程用戶名@遠(yuǎn)程服務(wù)器IP:~/
這里我們先復(fù)制到 slave1 機(jī)器上,IP 為 192.168.146.201
由上圖可知,我們將文件 in_rsa.pub 文件傳過去了,位置是 /home/hadoop。我們登錄到 slave1 機(jī)器上查看這個文件
第八步:如果是第一次使用該命令,則需要在"/home/hadoop/"下創(chuàng)建".ssh"文件夾,并且修改該文件夾權(quán)限為 “700”
如果不進(jìn)行,即使你按照前面的操作設(shè)置了"authorized_keys"權(quán)限,并配置了"/etc/ssh/sshd_config",還重啟了sshd服務(wù),在master能用"ssh localhost"進(jìn)行無密碼登錄,但是對slave1進(jìn)行登錄仍然需要輸入密碼,就是因為".ssh"文件夾的權(quán)限設(shè)置不對。這個文件夾".ssh"在配置SSH無密碼登錄時系統(tǒng)自動生成時,權(quán)限自動為"700",如果是自己手動創(chuàng)建,它的組權(quán)限和其他權(quán)限都有,這樣就會導(dǎo)致RSA無密碼遠(yuǎn)程登錄失敗。
- mkdir ~/.ssh //創(chuàng)建 .ssh 的文件夾
- chmod 700 ~/.ssh //給 .ssh 文件夾權(quán)限
第九步:將 master 的公鑰追加到 slave1 的授權(quán)文件 “authorized_keys” 中,并修改 該授權(quán)文件的權(quán)限,最后刪除該公鑰(保險起見)
- cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
- chmod 600 ~/.ssh/authorized_keys<br>rm -rf ~/id_rsa.pub
第十步:在 slave1 機(jī)器上重復(fù) 第 五 、六 步操作。
- vi /etc/ssh/sshd_config
- service sshd restart
第十一步:驗證,我們在 master 機(jī)器上使用 SSH 無密碼登錄 slave1 機(jī)器
- ssh 遠(yuǎn)程服務(wù)器IP
注意看我們兩個箭頭,說明已經(jīng)無密碼登錄到 slave1 機(jī)器上了。那么這樣就算大功告成。
因此剩下的我們就是重復(fù)的操作,將 master 的公鑰發(fā)送給 slave2,等等。
如果我們想直接 ssh 主機(jī)名 登錄,那么我們需要配置主機(jī)和 ip 地址的映射關(guān)系。
- vi /etc/hosts
注意:我們可以使用命令
- ssh-copy-id -i ~/.ssh/id_rsa.pub 用戶名@對方機(jī)器IP (注意不要忘記了參數(shù)-i)
那么這條命令的意思是:
- a) 先scp 將本機(jī)的id_rsa.pub復(fù)制到對方機(jī)器的.ssh目錄下
- b) 在對方機(jī)器上執(zhí)行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 導(dǎo)入公鑰
這樣寫我們可以省略很多步驟。
注意:如果第一次使用該命令時,我們要先在 機(jī)器上創(chuàng)建 .ssh 的文件夾,并且賦予 700 的權(quán)限。
設(shè)置用 SSH 別名 登錄
用 hadoop 用戶登錄系統(tǒng),在 /.ssh 目錄下新建一個 config 文件(如果沒有就新建)
在其中增加:
保存后退出,然后 設(shè)置 config 權(quán)限為 600
完成后即可用 ssh host 來登錄主機(jī),而不需要輸入IP地址