作者:杜延振
日期:2016/3/29
1.在用戶目錄下執行命令
ssh-keygen -t rsa
一路回車:
2.在當前用戶目錄下,進入.ssh文件夾(.ssh文件夾為隱藏文件夾,直接進去即可)。
在.ssh文件夾下執行命令:
cat id_rsa.pub > authorized_keys
即把id_rsa.pub文件的內容寫進authorized_keys文件中
此時運行命令:ll
查看生成的authorized_keys文件的權限,如果沒錯的話該文件應該帶有寫權限,當有寫權限時,是不能進行無密鑰登陸的,因為此時不安全。
修改authorized_keys文件的權限:
chmod go-xw -t authorized_keys
此時再執行命令:ssh h2(因為我把本機的hostname改成了h2,所以ssh h2代表登陸本機,其中ssh后面應改成你自己對應的:可查看剛生成的文件authorized_keys
)
則不會再讓輸入密碼。如下圖:
至此,就實現了本機無密鑰登陸。
3.把剩余的機器在其對應機器上重復步驟1,2.
4.把各個機器上生成的authorized_keys文件的內容合并成一個,并用該文件替換每個機器上的authorized_keys文件,如圖:
至此即可實現各個機器之間無密鑰登陸
補充:若只是實現master免秘鑰登陸到slave節點,只將master節點生成公鑰復制到各個slave節點就能實現目的。
原理:Master(NameNode | JobTracker)作為客戶端,要實現無密碼公鑰認證,連接到服務器Salve(DataNode |Tasktracker)上時,需要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,而后將公鑰復制到所有的Slave上。當Master通過SSH連接Salve時,Salve就會生成一個隨機數并用Master的公鑰對隨機數進行加密,并發送給Master。Master收到加密數之后再用私鑰解密,并將解密數回傳給Slave,Slave確認解密數無誤之后就允許Master進行連接了。這就是一個公鑰認證過程,其間不需要用戶手工輸入密碼。重要過程是將客戶端Master復制到Slave上。