ssh免密登錄工作原理
server A免登錄到server B:
1.在A上生成公鑰私鑰。
2.將公鑰拷貝給server B,要重命名成authorized_keys(從英文名就知道含義了)
3.Server A向Server B發送一個連接請求。
4.Server B得到Server A的信息后,在authorized_keys中查找,如果有相應的用戶名和IP,則隨機生成一個字符串,並用Server A的公鑰加密,發送給Server A。
5.Server A得到Server B發來的消息后,使用私鑰進行解密,然后將解密后的字符串發送給Server B。Server B進行和生成的對比,如果一致,則允許免登錄。
總之:A要免密碼登錄到B,B首先要擁有A的公鑰,然后B要做一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。
1.在A上生成公鑰私鑰。
2.將公鑰拷貝給server B,要重命名成authorized_keys(從英文名就知道含義了)
3.Server A向Server B發送一個連接請求。
4.Server B得到Server A的信息后,在authorized_keys中查找,如果有相應的用戶名和IP,則隨機生成一個字符串,並用Server A的公鑰加密,發送給Server A。
5.Server A得到Server B發來的消息后,使用私鑰進行解密,然后將解密后的字符串發送給Server B。Server B進行和生成的對比,如果一致,則允許免登錄。
總之:A要免密碼登錄到B,B首先要擁有A的公鑰,然后B要做一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。
注意:上述只能實現單向免密登錄
接下來配置相互免密登錄:
其關鍵點在,收集所有主機的公鑰將其共享到master的authorized_keys文件中,然后再用scp復制到各個主機的.ssh文件夾下
0、給所有沒安裝ssh的主機安裝ssh
sudo apt-get install ssh sudo apt-get install rsync
1、修改master的配置文件 gedit /etc/hosts
給每個需要互聯的機器設置IP地址 和 名稱(每台機中自行修改)
如127.0.0.1 localhost
192.168.137.129 master
192.168.137.130 slave1
192.168.137.131 slave2
2、給每個主機生成公鑰和秘鑰
ssh-keygen –t rsa -->直接回車生成的密鑰對:id_rsa和id_rsa.pub,
默認存儲在"/home/hadoop/.ssh"目錄下。
先設置第六步
3、master 先將自身的公鑰加到key中去,之后將所有slave機上的公鑰發給master機
master中: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
slave1中: scp ~/.ssh/id_rsa.pub root@master:~/id_rsa.pub
先發slave1,執行第4步后,再發slave2
4、把slave追加到授權的key里面去。
master 中: cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub %刪掉已經合並的公鑰。
有別的機子再執行第三步
5、修改master中key的權限
chmod 600 ~/.ssh/authorized_keys
6、修改每台機子的配置文件 gedit /etc/ssh/sshd_config
將圖片中提示的那三行上面的permitRootLogin 改成 yes 這樣就可以連接遠程的root用戶(在需要連的那台機子上 改)

service sshd restart -->重啟ssh服務
7、將key傳到每個slave機中
master: scp ~/.ssh/authorized_keys root@slave1:~/.ssh/authorized_keys
(scp ~/.ssh/authorized_keys 遠程用戶名@主機名或IP: %scp用法)
重復直到所有機子的key都一樣
給每個機子的.ssh 文件夾權限 :chmod 700 ~/.ssh
8、測試連接
ssh slave1 -->連接用戶
exit -->退出連接用戶