一、SSH來源
對于需要遠程管理其它機器,一般使用遠程桌面或者telnet。linux一般只能是telnet。但是telnet的缺點是通信不加密,存在不安全因素,只適合內網訪問。
為解決這個問題,推出了通信加密通信協議,即SSH(Secure Shell)。使用非對稱加密方式,傳輸內容使用rsa或者dsa加密,可以避免網絡竊聽。
hadoop的進程之間同信使用ssh方式,需要每次都要輸入密碼。為了實現自動化操作,需要配置ssh免密碼登陸方式。
二、ssh原理
步驟詳解:
圖中黑色步驟線見“三、配置”
綠色步驟線:
weekend110訪問spark01
1、weekend110帶上自己的用戶名和域名向spark01請求登錄。
2、spark01收到后,查看免密登錄授權列表,查看里面是否有weekend110對應的公鑰。
3、spark01找到公鑰后,隨機生成一個字符串用weekend110對應的公鑰進行加密,發給weekend110.
4、weekend110收到spark01的密文,用自己的私鑰進行解密,獲得一個明文。
5、weekend110將解密結果發送給spark01.
6、spark01驗證weekend110發來的明文與之前生成的隨機字符串核對。
7、一致則spark01通過weekend110的登錄請求。
三、配置
三個節點m1主、s1、s2
主節點m1配置:
首先到用戶主目錄(cd ?~),ls ?-a查看文件,其中一個為“.ssh”,該文件價是存放密鑰的。待會我們生成的密鑰都會放到這個文件夾中。
----------------------------------
現在執行命令生成密鑰: ssh-keygen -t rsa (使用rsa加密方式生成密鑰)回車后,會提示三次輸入信息,我們直接回車即可。即回車四下。
----------------------------------
進入文件夾cd ?.ssh (進入文件夾后可以執行ls ?-a 查看文件)?
創建文件?authorized_keys。命令touch?authorized_keys
修改authorized_keys文件權限為 600,命令:chmod 600 authorized_keys
將生成的公鑰id_rsa.pub 內容追加到authorized_keys(執行命令:cat id_rsa.pub >> authorized_keys)
從節點配置:
s1,s2以同樣的方式生成秘鑰(ssh-keygen -t rsa ),然后s1和s2將生成的id_rsa.pub公鑰追加到m1authorized_keys中)----------------------------------
在s1中執行命令:scp id_rsa.pub m1:/root/.ssh/id_rsa.pub.s1,將s1的公鑰copy到m1上。
在s2中執行命令:scp id_rsa.pub m1:/root/.ssh/id_rsa.pub.s2,將s2的公鑰copy到m1上。
---------------------------------
進入m1執行命令:cat id_rsa.pub.s1 >> authorized_keys ,cat id_rsa.pub.s1 >> authorized_keys。將s1,s2的公鑰加入m1的authorized_keys文件中。
----------------------------------
最后將生成的包含三個節點的公鑰的authorized_keys 復制到s1和s2的.ssh目錄下
( scp authorized_keys s1:/root/.ssh/, scp authorized_keys s2:/root/.ssh/)
這樣三個節點的authorized_keys 都有了自身節點的公鑰和其他節點的公鑰,如此節點間和節點自身都可以互相ssh免密碼登錄,啟動hadoop時可以不用輸入密碼了。
*****************************************************
以上的配置方法是 兩臺機器可以互相ssh免密登錄。
但有時候只想S1免密登錄S2,反之則不可以。怎么辦?
用ssh-copy-id ?域名 ?這個命令。
操作:
在S1生成ssh秘鑰后。
在S1上輸入命令:
ssh-copy-id ?S1 ? //先把自己的公鑰拷貝到自己機子上
ssh-copy-id ?S2 ? //把自己的公鑰拷貝到S2的機子上。S2不需要用ssh-keygen
四、驗證ssh免密碼登錄
輸入命令ssh ?localhost(主機名) 根據提示輸入“yes”?輸入命令exit注銷(Logout)
再次輸入命令ssh localhost即可直接登錄