一、爲何要進行 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地址